繁体   English   中英

无法解析 JSON 对象的数组

[英]Can't parse array of JSON objects

我通过解析 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>

但服务器响应是(我的意思是 function 带有参数的响应):

[[{"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(''));
}

查看示例 →

首先,您试图迭代数据数组,但同时在每次迭代中,您都试图将一个新项目推送到数据上(我猜是数组?)。 这是没有 go。

var newOptions = new Array();

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

看看这对你有什么作用。

如果您为服务器响应粘贴的内容准确,则意味着您有两个 arrays。

所以你应该做

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有一个object。 应该:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM