3
<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script type="text/javascript">
    var url = "https://maps.googleapis.com/maps/api/place/search/json?key=AIzaSyBnEjp_CRcL_APx4mMsmuke9SV1PWZfnww&sensor=false&location=26.526437,-80.163004&radius=500&keyword=Physican%27s+Weight+Loss+Centers&types=";
    jQuery.getJSON(url, function (data) {
        alert(data);
    });

</script>
</body>
</html>

上記のコードを実行している間、アラート ウィンドウが表示されません。URL にはコールバック関数がありません。jQueryまたはJavascriptを使用してJSON URLからデータを解析/取得する方法に関するヘルプまたは有用なリンクをいただければ幸いです。

4

3 に答える 3

2

これはクロスドメインだと思います。この場合、次のjQueryが機能するはずです。

$.ajax(url, {
    crossDomain: true,
    dataType: 'jsonp'
}).success(function(data) {
    alert(data);
}).fail(function() {
    alert('fail');
});

注:jQueryは、クロスドメインリクエストでhttpステータスコードにアクセスすることはできません。200の応答では.success()を起動し、200以外の応答では.fail()を起動します。たとえば、処理に苦労します。 404対403クライアント側。より細かく制御したい場合は、jquery-jsonpのようなものを使用することを検討してください。

また注目に値する:ブラウザデバッガー(firebug / whatever)を使用すると、少なくともajaxリクエストで返される応答がわかるはずです-リクエストが200以外を取得している可能性があります-これは失敗のケースになりますjQuery。この場合、できることには少し制限があります。

いくつかの背景資料:http://en.wikipedia.org/wiki/Same_origin_policy

于 2012-09-24T12:36:10.937 に答える
2

そのリクエストに対して Google から返されたヘッダーでは、クロスドメイン クエリが許可されていません。

HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
cache-control: private
content-encoding: gzip
content-length: 1932
content-type: application/json; charset=UTF-8
date: Mon, 24 Sep 2012 12:27:10 GMT
server: mafe
vary: Accept-Language
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block

したがって、実際に行う必要があるのは、サーバーにコードを配置してデータを取得し、それを渡すことで、クロス ドメイン ルールに違反しないようにすることです。

それか、Google が API の JSONP バージョンを提供しているかどうかを確認してください。

于 2012-09-24T12:28:20.857 に答える
1

何が起こっているのか、一般的にそれを回避する方法については、Paul Tregoing の投稿を参照してください。

ただし、この場合、実際にはGoogleマップ用の適切なJavaScript APIがあります(使用していると思われる場所を含む)。ここで確認できます。

于 2012-09-24T12:29:44.810 に答える