无法解析JSON对象的数组

时间:2011-06-09 22:29:23

标签: javascript jquery ajax arrays json

我通过解析JSON对象来破坏我的大脑。 我有这个js:

function get_cities(id) 
 {
    $('#def').hide();
    $('#cities').html('');
    $.get('/emprego/index.php/add/get_cities/'+id, null, onAjaxSuccess, "JSON" );
}
function onAjaxSuccess(data)
{
  $.each(data, function(key, val)
  {
    data.push("<option value='"+key+"'>"+val+"</option>");
  });
  $('#cities').append(data.join(''));
}

此代码返回:

<select id="cities" name="cities">
[object Object],[object Object]
<option value="0">[object Object],[object Object]</option>
</select>

但是服务器响应是(我的意思是函数对参数的响应):

[[{"id":"1","name":"Lisboa"},{"id":"2","name":"Cascais"}]]

如何解析此html的响应:

<select id="cities" name="cities">
<option value="1">Lisboa</option>
<option value="2">Cascais</option>
</select>

谢谢!

4 个答案:

答案 0 :(得分:2)

由于data是双重封闭的数组,因此您必须在$.each上运行data[0]。您还希望将结果推送到holder数组而不是data本身。然后,您需要传递val参数的相应键:

function onAjaxSuccess(data) {
    var holder = [];
    $.each(data[0], function(key, val) {
        holder.push("<option value='" + val.id + "'>" + val.name + "</option>");
    });
    $('#cities').append(holder.join(''));
}

See example →

答案 1 :(得分:0)

首先,你试图迭代数据数组,但在每次迭代的同时你试图将一个新项目推送到数据(我猜的数组?)。这是不行的。

var newOptions = new Array();

$.each(data, function(key, val) {
    newOptions.push("<option value='" + key + "'>" + val + "</option");
});

看看它为你做了什么。

答案 2 :(得分:0)

如果您为服务器响应粘贴的内容准确无误,则表示您有两个阵列。

所以你应该做

var result = [];
$.each(data[0], function(opt) { // Get the info from the array inside the array
  // opt contains {id:1, name:'Lisboa'}
  result.push('<option value="' + opt.id + '">' + opt.name + '</option>');
});
$('#cities').append(result.join(''));

最后,将流程信息存储在不同的数组(结果)中。

答案 3 :(得分:0)

我认为服务器响应错误,太多'['和']'。

应该是这样的:

[{"id":"1","name":"Lisboa"},{"id":"2","name":"Cascais"}]

这一行:

data.push("<option value='"+key+"'>"+val+"</option>"); 

也错了,val有一个对象。应该是:

data.push("<option value='"+key+"'>"+val.name+"</option>");