我通过解析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>
谢谢!
答案 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(''));
}
答案 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>");