[英]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.