Php 解析JSON Ajax响应
我在解析JSON响应时遇到问题。我已经做了很多次了,但这不起作用的原因我不明白。以下是我正在做的: 在任何人提出建议之前——由于我正在从事的项目的某些要求,我必须使用服务器端的Google Geocoding web服务,我不能在客户端完成所有工作 我使用PHP作为服务器端部分。我使用AJAX(通过jQuery)将位置发送到服务器,获取响应并返回编码为JSON的位置。以下是服务器端代码:Php 解析JSON Ajax响应,php,javascript,jquery,ajax,json,Php,Javascript,Jquery,Ajax,Json,我在解析JSON响应时遇到问题。我已经做了很多次了,但这不起作用的原因我不明白。以下是我正在做的: 在任何人提出建议之前——由于我正在从事的项目的某些要求,我必须使用服务器端的Google Geocoding web服务,我不能在客户端完成所有工作 我使用PHP作为服务器端部分。我使用AJAX(通过jQuery)将位置发送到服务器,获取响应并返回编码为JSON的位置。以下是服务器端代码: <?php if(!empty($_POST['theLocation'])) { $loc
<?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);
}
?>
当我尝试访问数据.results[0]
时,我得到错误未捕获类型错误:无法读取未定义的属性“0”。这显然意味着没有结果属性。但是,如果我执行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,显然有一个results属性。我不知道为什么我会遇到这样的问题,我一定是错过了什么,但通过我的调试,我还没有找到什么。如果有人能提供任何建议,我们将不胜感激。谢谢 您正在设置数据类型:“json”
。这意味着jQuery将把结果解析为JSON
丢失data=$.parseJSON(数据)代码>行,那么它应该可以工作
另外,正如@SLaks所指出的:在PHP中,$response
已经是JSON格式。无需对其进行json\u编码。只是echo$response
No;他在用PHP对其进行双重编码。@SLaks:看来他也在这样做。@RocketHazmat我希望人们阅读整个问题,而不是仅仅说“不”@Pete为什么这样会有帮助?发送的内容格式正确。google api已经返回了一个JSON字符串,因此您不需要对其进行JSON编码。
{
"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"
}