0

Geocoding API に対して JavaScript コードでジオコーディングしようとしています。var url = "http://http://maps.googleapis.com/maps/api/geocode/json?address=New York, Manhattan&sensor=false" JSON オブジェクトを取得する必要があるURL を定義 します。私が使用した最初のアプローチは、ウィキペディアによると、このように XmlHttpRequest を使用していました

var my_JSON_object = {};
var http_request = new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange = function () {
  var done = 4, ok = 200;
  if (http_request.readyState == done && http_request.status == ok) {
       my_JSON_object = JSON.parse(http_request.responseText);
  }
};

open() 関数がトリガーされた後、コードを実行し、デバッガーでそのような出力を取得します。

http_request: XMLHttpRequest
onabort: null
onerror: null
onload: null
onloadend: null
onloadstart: null
onprogress: null
onreadystatechange: function () {
readyState: 1
response: ""
responseText: ""
responseType: ""
responseXML: null
status: [Exception: DOMException]
statusText: [Exception: DOMException]
upload: XMLHttpRequestUpload
withCredentials: false
__proto__: XMLHttpRequest

これは、本当に役立つことは何も起こらなかったことを意味します。私の2番目のアプローチはjson.orgによるもので、JSONRequestでget呼び出しを試みました

var requestNumber = JSONRequest.get(
url, 
function (requestNumber, value, exception) {
    if (value) {
        document.write(value);
    } else {
        document.write(exception);
    }
}

デバッガーは、JSONRequest が定義されていないことを教えてくれました! json.org のネイティブ JS オブジェクトが原因で、何が問題なのですか? ちなみに、近くのスクリプトでGoogleから取得したAPIキーを適切に使用しています。

私のソリューションが失敗した理由の説明と、このタスクに準拠する方法についての提案をいただければ幸いです。

4

1 に答える 1

0

クロス ドメイン XHRApache/HTTP プロキシなどのハックについて読みましたが、結論としては、Javascript API V3 ジオコーディングが唯一の現実的なオプションであるということです。このコメント(ここから)は信頼できるものではありませんが、そのような JSON リクエストが機能しなくなったことを示しています。

グーグル マップ API がクロス ドメイン アクセスを許可することは合理的に期待できますが、これは最近まで許可されていました。今ではもう許可されていません。彼らはセキュリティ上の理由を主張していると思いますが、本当の理由は、彼らのコードだけを使用してサービスを受けることを義務付けていることだと思います. したがって、クライアントから JavaScript を介してデータを取得する唯一の方法は、Google の JavaScript API を使用することです。これにより、API URL を直接呼び出すのとほぼ同じ柔軟性が得られます。

この質問には、最も有用な情報が含まれていました。

于 2012-04-30T00:50:29.443 に答える