Передача многомерного массива JSON в функцию jQuery

#php #javascript #jquery #ajax #json

#php #javascript #jquery #ajax #json

Вопрос:

У меня есть массив PHP, который я хочу передать функции jQuery, которая его вызвала. Однако, когда я попытался получить значение ‘lat’, как я сделал ниже, я получаю сообщение об ошибке Cannot read property 'lat' of null , очевидно, потому, что я не знаю, как получить доступ к многомерному массиву JSON. Кто-нибудь может показать мне, как это сделать?

PHP-массив

 Array
(
[0] => Array
    (
        [price] => 1600
        [bedroom] => 1
        [lat] => -71.119385
        [lng] => 42.373917
        [distance] => 6.65195429565453
    )

[1] => Array
    (
        [price] => 1800
        [bedroom] => 1
        [lat] => -71.104248
        [lng] => 42.368172
        [distance] => 4.957829810472103
    )
}
  

Это кодируется в

JSON

 [{"price":"1600","bedroom":"1","lat":"-71.119385","lng":"42.373917","distance":"6.65195429565453"},{"price":"1800","bedroom":"1","lat":"-71.104248","lng":"42.368172","distance":"4.957829810472103"}]
  

jQuery

 $(function() {
    $("#search_button").click(function(e){
        e.preventDefault();
        var search_location = $("#search_location").val();
        $.getJSON('index.php/main/get_places', {search_location: search_location}, function(json){
            $("#result").html(json.lat);
            console.log(json.lat);
        });
    });
});
  

Ответ №1:

json это массив, поэтому у него не будет свойства lat .

Попробуйте:

 json[0].lat
  

Например, для получения свойства lat первого объекта.

Комментарии:

1. console.log(json[0].lat); ничего не было зарегистрировано в консоли javascript…

2. Тогда JSON это не то, что вы говорите 🙂

3. Я проверил строку JSON, возвращенную без использования AJAX. Это действительно JSON lol… Связано ли это со JSON строкой, не имеющей индексных номеров, таких как 1:, 2:

4. о, нет.. Я получаю ошибку Cannot read property '0' of null при использовании json[0].lat . Есть ли способ проверить, какова строка json, полученная функцией jquery?

5. Ах, хорошо, ответ, вероятно, не тот, который вы ожидаете. Есть несколько инструментов, чтобы посмотреть, что происходит, но я предпочитаю использовать инструменты разработчика в Chrome (нажмите ctl-shift-J, чтобы открыть — см. Вкладку Сеть).

Ответ №2:

 $.getJSON('index.php/main/get_places', {search_location: search_location}, function(json){
  $.each(json, function(key, val) {
      console.log(val.lat);
  });
});
  

Ответ №3:

Ваш json возвращается в виде массива объектов, поэтому сначала вам нужно сослаться на скаляр. Измените ваши ссылки на json.lat в json[0].lat.

Затем, если вам нужно, вы можете написать цикл for и ссылаться на него как json[i].lat , предполагая, что i — ваша переменная итератора.

Ответ №4:

json — это массив объектов, как и в вашем php-коде.

Итак, есть два значения lat:

 json[0].lat  // and
json[1].lat
  

Ответ №5:

Сама json переменная имеет значение null, как указано в сообщении об ошибке. Из-за этого все ответы о доступе к субиндексам json или итерации по нему, как по массиву, завершатся неудачей.

Посмотрите документацию для jQuery getJSON и parseJSON . getJSON передает ответ сервера parseJSON , чтобы преобразовать его в объект Javascript. parseJSON возвращает null «если вы ничего не передаете, пустую строку, null или undefined».

Я бы использовал отладчик вашего браузера, чтобы просмотреть необработанный http-ответ с сервера, потому что это, вероятно, виновник.

http://api.jquery.com/jQuery.getJSON/

http://api.jquery.com/jQuery.parseJSON/