0

JSON 応答の解析で問題が発生しています。私はこれを何度も行ってきましたが、これは私が識別できない理由で機能していません。これが私がやっていることです:

誰かがそれを提案する前に-私が取り組んでいるプロジェクトのいくつかの要件により、サーバー側のGoogleジオコーディング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);
}
?>

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 であり、明らかに results プロパティがあります。なぜこれで問題が発生するのかわかりません。何か不足しているに違いありませんが、デバッグを通じてまだ何がわかっていません。誰かが提案を提供できれば、それは非常に高く評価されます。ありがとう!

4

1 に答える 1

9

を設定していますdataType: 'json'。これは、jQuery が結果を JSON として解析することを意味します。

回線を失うと、data = $.parseJSON(data);機能するはずです。

また、@SLaks が指摘したように、PHP では、$response既にJSON形式になっています。その必要はありませんjson_encode。ただecho $response

于 2013-02-01T19:59:19.477 に答える