javascript - 将 li 输入值数据转换为 JSON

标签 javascript jquery ajax yii

你好,我需要保存多个值并使用 ajax 更新数据库。我正在使用 Yii 框架。

首先,我需要使用 ajax 作为 json 发送数据,但结果有误。

实时代码: http://jsfiddle.net/kxJwp/2/

我的 javascript 代码是:

$("#save").live('click', function(){
    var showtimes = [];
    var values = {};
    $('li inputs').each(function() {
        values[$(this).attr('name')] = $(this).val();
    });
    $('li').each(function(i) {
        showtimes[i]=values;
    });
    alert(JSON.stringify(showtimes));
});

Javascript 输出:

它输出最后一个 li 值 x li 的数量

输入:

<li>
    <input name="show_id" class="show_id att" type="hidden" value="" />
    <input name="movie_id" class="movie_id att" type="hidden" value="" />
    <input name="cinema_id" class="cinema_id att" type="hidden" value="" />
    <input name="status" class="status att" type="hidden" value="" />
    <input name="times" class="timesArray att" type="hidden" value="" />
<li>
<li>
    <input name="show_id" class="show_id att" type="hidden" value="" />
    <input name="movie_id" class="movie_id att" type="hidden" value="" />
    <input name="cinema_id" class="cinema_id att" type="hidden" value="" />
    <input name="status" class="status att" type="hidden" value="" />
    <input name="times" class="timesArray att" type="hidden" value="" />
<li>

最佳答案

你只看到一行,因为你只有一个对象,而你需要一个对象数组,所以先声明一个数组,然后继续向其中添加对象。像这样:

$("#save").live('click', function(){
  var showtimes = [];    // Create empty javascript array
  var objec={};
  $("li").find("input").each(function(index) {           // Iterate over inputs

    objec=new Object; // to create a new object for every matched element

    objec[$(this).attr('name')]=$(this).val()+'avla';
    showtimes[index]=objec;  // Add object to array
  });

  var json = JSON.stringify(showtimes);
  alert(json);
});

代码解释: 使用内置 index of each() ,通过将索引传递给函数,例如:function(index){...}

编辑:objec=new Object; 是为了避免获得重复的值,因为每次将相同的对象添加到数组中,但是使用 new 时,每次都会创建一个新对象,并且被添加到数组中。

更新:选择 li 的更好方法是使用选择器,例如:$("li:has(input)") 然后循环遍历 children :

$("#save").live('click', function(){
    var showtimes = [];
    var values = {};
    $("li:has(input)").each(function(i){
        values = new Object;
        $(this).children().each(function(){
            values[$(this).attr('name')]=$(this).val();
        });
        showtimes.push(values);
    });
    alert(JSON.stringify(showtimes));
});

编辑:上述两个示例中的输出(形成的数组)不同。

代码示例 1 的输出:

json=[{"show_id":"1avla"},{"movie_id":"2avla"},{"cinema_id":"3avla"},{"status":"4avla"},{"times":"5avla"},{"show_id":"6avla"},{"movie_id":"7avla"},{"cinema_id":"8avla"},{"status":"9avla"},{"times":"0avla"}]

代码示例 2 的输出:

json=[{"show_id":"1","movie_id":"2","cinema_id":"3","status":"4","times":"5"},{"show_id":"6","movie_id":"7","cinema_id":"8","status":"9","times":"0"}]

关于javascript - 将 li 输入值数据转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866291/

相关文章:

php - Ajax选择控制PHP MySQL?

javascript - jQuery - 将组合添加到字符串中,并对表单的许多输入字段重复此操作

JavaScript/jQuery : does anybody already created a loading fixed div on top 100%:100% of the page with jquery?

jquery - 具有 jQuery 和 CSS3 选择器的 CasperJS 无法按预期工作

python - Django Rest request.data 对象为空

javascript - 如何从行尾(SVG)绘制动画?

javascript - 如何让我的下拉菜单一次只允许打开一个下拉菜单,并在单击 <li> 时保持打开状态?

javascript - 如何获取数组中的value属性?

javascript - 调用两个相互依赖但没有异步的 ajax 调用

jquery - 如何获取 bootstrap-fileinput 中的响应数据?