Jquery: иметь дело с ответом JSON? - PullRequest
0 голосов
/ 24 июня 2010

У меня проблемы с анализом ответа моего приложения.Вот звонок с моим лучшим предположением о том, как бороться с возвращением json ...

$.ajax({
  url: 'houses.json',
  method: 'GET',
  datatype: 'json',
  success: function (data) {
    $.each(data, function (h) {
      $(h).each(function () {
        console.log(h.address);
      });
    });
});

Вот ответ, который я получаю с сервера:

[{
  "house": {
    "address": "7 view st dunedin nz",
    "lng": 170.500908,
    "id": 3,
    "lat": -45.875059
  }
}, {
  "house": {
    "address": "26 brown st dunedin nz",
    "lng": 170.496236,
    "lat": -45.875834,
  }
}]

лучшее, что я могу получить, это сказать неопределенное.Однажды.Я пытаюсь настроить цикл для создания маркеров для карты Google.Я мог бы использовать другую пару глаз.Кто-нибудь?Спасибо.

Ответы [ 4 ]

4 голосов
/ 24 июня 2010

Поскольку h - это массив, вам нужно пройтись по цепочке свойств, h - это коллекция house объектов, которые имеют свойство address, поэтому измените его немного, например:

   $.each(data, function(i, h){
     console.log(h.house.address);
   });

Обязательно удалите лишний цикл вокруг него, нет необходимости, поскольку существует только один массив.

Вот визуальный способ думать об этом:

   h       h.house           h.house.address
 [ {       "house":{         "address":"7 view st dunedin nz".....
0 голосов
/ 24 июня 2010

Это должно быть похоже на

$.ajax({
    url: 'houses.json',
    method: 'GET',
    dataType: 'json',
    success: function(data){
       $.each(data, function(h){

               console.log(h.house.address);

       });

Обратите внимание на секции dataType: 'json', и console.log(h.house.address);.

0 голосов
/ 24 июня 2010

Первый параметр в обратном вызове для each - это индекс, поэтому вам нужно два параметра:

$.ajax({
  url: 'houses.json',
  method: 'GET',
  datatype: 'json',
  success: function(data){
    $.each(data, function(i, item){
      $.each(item, function(j, house){
        console.log(house.address);
      });
    });
});

В качестве альтернативы вы можете использовать тот факт, что элемент установлен в качестве контекста для обратного вызова, поэтому вы можете использовать ключевое слово this для доступа к нему:

$.ajax({
  url: 'houses.json',
  method: 'GET',
  datatype: 'json',
  success: function(data){
    $.each(data, function(){
      $.each(this, function(){
        console.log(this.address);
      });
    });
});

Внутренний цикл будет проходить через свойства в объекте, который является только одним. Вы можете напрямую получить доступ к собственности:

$.ajax({
  url: 'houses.json',
  method: 'GET',
  datatype: 'json',
  success: function(data){
    $.each(data, function(){
      console.log(this.house.address);
    });
});
0 голосов
/ 24 июня 2010

Это потому, что вы определяете функцию обратного вызова как function(h), думая, h - это объект из массива.Но это не так, это индекс элемента.

Просто оставьте параметры и используйте this (указывает на элемент):

$.each(data, function(){
     console.log(this.house.address);
});

или задайте оба параметра:

$.each(data, function(index, element){
     console.log(element.house.address);
});

или получите доступ к массиву по индексу:

$.each(data, function(h){
     console.log(data[h].house.address);
});

Ник уже сказал, как вам следует обращаться к свойствам.


Ссылка: each()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...