$.ajax({
type: "GET",
url: "auth/classes/",
async: true,
cache: false,
success: function(data){
var json=eval('('+data+ ')');
我得到的回应是
{
"id":"1117",
"name":"London"
}
{
"id":"1118",
"name":"New York
}
{
"id":"1119",
"name":"California"
}
我可以访问第一个数组,例如json['id']
,json['name']
如何迭代此回复?
答案 0 :(得分:1)
因此,让我们专注于您的成功处理功能。特别是传递给它的data
参数。如果来自服务器的响应的内容类型标题是application / json,那么jQuery足够聪明,可以理解并将javascript对象作为data
参数传递。
如果您不知道服务器传回的内容,我建议您这样做:
success: function(data){
console.log(data);
}
然后检查控制台上的对象(我推荐Chrome,因为它有一个很棒的调试器)。如果不是javascript对象,而是将json作为文本,那么解析它的正确方法是:
var dataAsAnObject = JSON.parse(data);
// and accessing parts of the object once parsed, it depends on the object:
// you use [integer] to access arrays:
var thisIsTheThirdElementInAnArray = dataAsAnObject[3];
// you use ['string'] to access values by key in an associative array:
var thisIsTheValueOfKeyHello = dataAsAnObject['Hello'];
在你的情况下,它不清楚,因为你粘贴的是无效的json。但我的建议是单步执行调试器并将内容记录到控制台,以便您可以了解更多信息。
答案 1 :(得分:0)
不确定这里真正的问题是什么,你肯定没有得到你写的回复。也许你得到了:
[{“id”:“1117”,“name”:“London”}, {“id”:“1118”,“name”:“New York”}, { “ID”: “1119”, “名称”: “加利福尼亚”}]
数组?也许你是将数组作为对象的一部分?我想这个奇怪的结果与eval
的奇怪用法有关(我真的没有得到你想要做的 - 解析一个JSON?)
但是因为它可能是一个数组,你可以用usual:
迭代它for (var i =0, i < data.length, i++) {
console.log(data[i].id); //etc.. do something usefull with the data
}
答案 2 :(得分:0)
如果我正确理解你的问题,不,你不能直接过滤像这样的json数组。您必须迭代数组的每个json对象,以查找与您的标准匹配的对象。
例如,给出一个有效的json对象数组,如果你想过滤id属性并获得第一个匹配的属性,你可以像这样迭代:
function getCityById(data,ID) {
var found=false, i=0;
while (!found && i<data.length) {
if (data[i].id === ID) {
found=true;
} else {
i++;
}
}
if (found) {
return data[i];
} else {
return null;
}
}
然后,您可以访问这样的特定ID:
var city = getCityById(data, 1117);
if (city != null) {
var name = city.name; // should be "London"
}