Jquery 为什么';每个循环正确地通过json数据吗?
以下是我的ajax调用:Jquery 为什么';每个循环正确地通过json数据吗?,jquery,json,loops,Jquery,Json,Loops,以下是我的ajax调用: $.ajax({ url: 'url-to-json', type: 'POST', dataType: 'json', cache: 'false', data: { lat: lat, lng: lng } }).done(function(data) { $.each(data, function(a) { alert(data[a]); }); }); 下面是它迭代的json: [ {"
$.ajax({
url: 'url-to-json',
type: 'POST',
dataType: 'json',
cache: 'false',
data: { lat: lat, lng: lng }
}).done(function(data) {
$.each(data, function(a) {
alert(data[a]);
});
});
下面是它迭代的json:
[
{"Id":"4c75bd5666be6dcb9f70c10f","Name":"BXtra","EnglishName":null,"Lat":35.7515869140625,"Lng":139.33872985839844},
{"Id":"4c5160a1d2a7c9b655d51211","Name":"セブンイレブン 武蔵野台店","EnglishName":null,"Lat":35.750205993652344,"Lng":139.33448791503906},
...
]
但它并没有让我真正访问json数组中每个项目的属性,而是一个接一个地遍历数组中的每个字符
我做错了什么?使用
此
引用中的当前元素。每个:
$.ajax({
url: 'url-to-json',
type: 'POST',
dataType: 'json',
cache: 'false',
data: { lat: lat, lng: lng }
}).done(function(data) {
$.each(data, function() {
alert(this.Id);
});
});
您可以修改$。每个功能有两种方式:
$.each(data, function(index,el) {
// el = object in array
// access attributes: el.Id, el.Name, etc
});
或者
如果data
是done
函数中的字符串,而不是对象,则需要运行
data = $.parseJSON(data)
在您的$之前。每个循环可能您的服务器没有返回正确的JSON MIME类型(“应用程序/JSON”),而JQuery只是将其解释为一个字符串?使用success始终对我有效:
$.ajax({
url: 'url-to-json',
type: 'POST',
dataType: 'json',
cache: 'false',
data: { lat: lat, lng: lng },
success: function(data) {
$.each(data, function() {
alert(this.Id);
});
}
});
强制解析JSON将是:jQuery.parseJSON(JSON)
作为临时修复,如果数据类型正在播放…为了添加解释,OP的方法是在使用data[a]
时检索回对象,这仍然需要引用该对象的属性。如果OP的方法只是将其修改为类似于data[a].Id
,data[a]['Id']
,或者类似的东西,那么OP的方法就可以了。但是,在内部时,每个this==object[key]
,也就是说this==data[a]
使用this
仍然分别迭代JSON的每个字符。如果Ialert(this)
它会逐个显示每个字符。如果我alert(this.Id)
它显示未定义。我已经验证了它,它可以工作。你确定你在done
中得到了正确的数据吗?尽管我将类型设置为JSON,但它没有对其进行解析。请尝试将success
回调传递给.ajax
函数,而不是使用.done()
。谢谢你的提示。我也试过了。仍然一个接一个地遍历json结果的每个字符。我还怀疑问题出在json上。您确定您得到的JSON是可解析的吗?谢谢,手动调用$。parseJSON(JSON)
可以工作。我得仔细看看退货的MIME类型。我试过这个。。。似乎每个el都在引用json的每个单独字符。。。就像它是一个字符串一样,循环对每个字符而不是数组中的每个条目进行迭代。哦,在这种情况下,数据
可能会作为字符串而不是对象返回。在done
函数中运行alert(数据类型)
。如果返回为字符串
,则数据
不会被转换为对象。我不知道.done()
是否使用$.ajax
的数据类型
属性,或者它是否只使用原始响应这是。。。即使我将类型设置为JSON,它也没有解析它。。。谢谢@Chad您是否检查了服务器返回的MIME类型?
$.ajax({
url: 'url-to-json',
type: 'POST',
dataType: 'json',
cache: 'false',
data: { lat: lat, lng: lng },
success: function(data) {
$.each(data, function() {
alert(this.Id);
});
}
});