如何解决无法解析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,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>\");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。