无法解析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>
谢谢!     
已邀请:
        由于
data
是一个双封闭数组,因此您必须在
data[0]
上运行
$.each
。您还希望将结果推入
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(\'\'));
}
参见示例→     
        首先,您尝试遍历数据数组,但是同时在每次迭代中,您都尝试将新项推入数据(我猜是数组吗?)。这是不行的。
var newOptions = new Array();

$.each(data, function(key, val) {
    newOptions.push(\"<option value=\'\" + key + \"\'>\" + val + \"</option\");
});
看看有什么用。     
        如果为服务器响应粘贴的内容正确,则表示您有两个阵列。 所以你应该做
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(\'\'));
最后,将过程信息存储在另一个数组中(结果)。     
        我认为服务器响应错误,\'[\'和\'] \'太多。 应该是这样的:
[{\"id\":\"1\",\"name\":\"Lisboa\"},{\"id\":\"2\",\"name\":\"Cascais\"}]
这行:
data.push(\"<option value=\'\"+key+\"\'>\"+val+\"</option>\"); 
也是错误的,
val
有一个物体。应该:
data.push(\"<option value=\'\"+key+\"\'>\"+val.name+\"</option>\"); 
    

要回复问题请先登录注册