Php 解析JSON Ajax响应

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

我在解析JSON响应时遇到问题。我已经做了很多次了,但这不起作用的原因我不明白。以下是我正在做的:

在任何人提出建议之前——由于我正在从事的项目的某些要求,我必须使用服务器端的Google Geocoding web服务,我不能在客户端完成所有工作

我使用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);
}
?>
当我尝试访问
数据.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"
}