4

これが私の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 配列内の各項目のプロパティに実際にアクセスできるようにする代わりに、文字どおり、配列内の各文字を 1 つずつループします。

私は何を間違っていますか?

4

4 に答える 4

9

$.each関数を変更するには、次の 2 つの方法があります。

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

dataオブジェクトではなく関数内の文字列である場合は、done実行する必要があります

data = $.parseJSON(data)

あなたの$.eachループの前に

于 2012-07-05T15:49:06.400 に答える
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);
    });
});
于 2012-07-05T15:43:58.940 に答える
0

サーバーがJSONに適切なMIMEタイプ('application / json')を返しておらず、JQueryがそれを単なる文字列として解釈している可能性がありますか?

于 2012-07-05T16:00:59.137 に答える
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 )。dataTypeが再生されている場合の一時的な修正として...

于 2012-07-05T16:13:36.017 に答える