为什么这个jQuery .each没有正确循环json数据?

时间:2012-07-05 15:40:14

标签: 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:

[
{"Id":"4c75bd5666be6dcb9f70c10f","Name":"BXtra","EnglishName":null,"Lat":35.7515869140625,"Lng":139.33872985839844},

{"Id":"4c5160a1d2a7c9b655d51211","Name":"セブンイレブン 武蔵野台店","EnglishName":null,"Lat":35.750205993652344,"Lng":139.33448791503906},

...
]

但是实际上不是让我访问json数组中每个项的属性,而是逐个循环遍历数组中的每个字符。

我做错了什么?

4 个答案:

答案 0 :(得分:9)

您可以通过两种方式修改$.each功能:

$.each(data, function(index,el) {
    // el = object in array
    // access attributes: el.Id, el.Name, etc
});

或者,

$.each(data, function() {
    // this = object in array
    // access attributes: this.Id, this.Name, etc
});

如果datadone函数中的字符串而不是对象,那么您需要运行

data = $.parseJSON(data)
$.each循环

之前

答案 1 :(得分:4)

使用this引用.each中的当前元素:

$.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);
    });
});

答案 2 :(得分:0)

也许你的服务器没有为JSON('application / json')返回正确的MIME类型,而JQuery正在将它解释为一个字符串?

答案 3 :(得分:0)

成功总是对我有用:

$.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 )作为临时修复...