#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-ответ с сервера, потому что это, вероятно, виновник.