Jquery 为什么';每个循环正确地通过json数据吗?

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调用:

$.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的每个字符。如果I
alert(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);
    });
  }
});