Я столкнулся с проблемой, анализируя ответ JSON. Я делал это много раз, но это не работает по той причине, которую я не могу различить. Вот что я делаю:
Прежде чем кто-либо подскажет это – из-за некоторых требований проекта я работаю над тем, что я должен использовать веб-сервис Google Geocoding на стороне сервера, я не могу сделать это на всех клиентах.
Я использую PHP для части сервера. Я использую AJAX (через jQuery), чтобы отправить местоположение на сервер, получив ответ и вернув его в виде JSON. Вот код на стороне сервера:
<?php if(!empty($_POST['theLocation'])) { $loc = urlencode($_POST['theLocation']); $response = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?address=$loc,+CA&sensor=false"); echo json_encode($response); } ?>
Вот клиентский вызов, где theLocation – это имя места:
var postdata = "theLocation=" + encodeURIComponent(theLocation); $.ajax( { type : "POST", url : "GeoEncode.php", data :postdata , dataType : "JSON", success : function(data) { data = $.parseJSON(data); lat = data.results[0].geometry.location.lat; lng = data.results[0].geometry.location.lng; }, error: function (request, status, error) { log("Error: getLatLong Status - " + status + " ErrorText - " + error); } });
Когда я пытаюсь получить доступ к data.results[0]
Я получаю сообщение об ошибке Uncaught TypeError: Cannot read property '0' of undefined
. Это, очевидно, означает, что свойства результатов нет. Однако, если я делаю console.log(data)
Это то, что я получаю:
{ "results": [ { "address_components": [ { "long_name": "Halifax", "short_name": "Halifax", "types": [ "locality", "political" ] }, { "long_name": "Halifax", "short_name": "Halifax", "types": [ "administrative_area_level_3", "political" ] }, { "long_name": "Halifax Regional Municipality", "short_name": "Halifax Regional Municipality", "types": [ "administrative_area_level_2", "political" ] }, { "long_name": "Nova Scotia", "short_name": "NS", "types": [ "administrative_area_level_1", "political" ] }, { "long_name": "Canada", "short_name": "CA", "types": [ "country", "political" ] } ], "formatted_address": "Halifax, NS, Canada", "geometry": { "bounds": { "northeast": { "lat": 44.7035312, "lng": -63.55963089999999 }, "southwest": { "lat": 44.5949302, "lng": -63.68627009999999 } }, "location": { "lat": 44.6488625, "lng": -63.5753196 }, "location_type": "APPROXIMATE", "viewport": { "northeast": { "lat": 44.7035312, "lng": -63.55963089999999 }, "southwest": { "lat": 44.5949302, "lng": -63.68627009999999 } } }, "types": [ "locality", "political" ] } ], "status": "OK" }
Это действительный JSON, очевидно, свойство результатов. Я не знаю, почему у меня возникают проблемы с этим, я должен что-то пропустить, но через мою отладку мне еще предстоит выяснить, что. Если бы кто-нибудь мог предложить какие-либо предложения, это было бы очень оценено. Благодаря!