解析JSON Ajax响应

我在解析JSON响应时遇到了麻烦。 我已经做了很多次,但这是因为我无法辨别的原因。 这是我正在做的事情:

在任何人建议之前 – 由于我正在研究的项目的一些要求,我必须使用服务器端的Google Geocoding Web服务,我无法在客户端做到这一点。

我正在使用PHP作为服务器端部分。 我正在使用AJAX(通过jQuery)将位置发送到服务器,获取响应并将其编码为JSON。 这是服务器端代码:

 

这是客户端调用,其中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,有明显的结果属性。 我不知道为什么我遇到这个问题,我必须遗漏一些东西但是通过我的调试我还没找到什么。 如果有人能提供任何建议,我将非常感激。 谢谢!

您正在设置dataType: 'json' 。 这意味着jQuery会将结果解析为JSON。

丢失data = $.parseJSON(data); 行,然后它应该工作。

另外,正如@SLaks所指出的那样:在你的PHP中, $response 已经是JSON格式。 无需json_encode它。 只是echo $response