0

jQuery.getJSON次のコードを使用して、サイトから情報を取得しようとしています。

<script>
var url = "https://www.gov.uk/api/foreign-travel-advice/usa.json";

alert(url);

$.getJSON(url + "?callback=?",null, function (json) {

alert(json);  
alert(json.details.description);
})

</script>  

これは IE でエラーを返します: Webpage error details

ユーザーエージェント: Mozilla/4.0 (互換性; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) タイムスタンプ: Thu, 9 2013 年 5 月 16:51:48 UTC

Message: Expected ';'
Line: 1
Char: 18
Code: 0
URI: https://www.gov.uk/api/foreign-travel-advice/usa.json?callback=jQuery1910011146073418833335_1368117826272&_=1368117826273

usa.json をファイルとしてダウンロードすると、すべて正常に動作します。

他の回答を読んで、サイトがコールバックを正しくサポートしていないことが問題だと思います。サーバーを制御できないため、このエラーを回避する方法を誰か教えてもらえますか?

4

2 に答える 2

2

JSON と JSONP を混同していますが、これらは 2 つの非常に異なるものです。

JSONはデータ表記です。JSON 表記のオブジェクトは次のようになります。

{"foo": "bar"}

JSONPは、バックグラウンドでタグと関数呼び出しを使用することにより、 Same Origin ポリシーを回避する JSON のトランスポート メカニズムです。script上記の JSONP は次のようになります。

callback({"foo": "bar"})

URL を入力すること?callbackで、JSON ではなく JSONP を期待するように jQuery に指示します。

話している API が JSONP をサポートしていない場合、その API で JSONP を使用することはできません。YQL をプロキシとして使用できる場合があります。それ以外の場合は、そのサイトがCORSをサポートしており (簡単なチェックでサポートしていないことが示されている)、 CORS 対応のブラウザーを使用しているユーザーを信頼できる場合を除き、独自のサーバーを介してこれを実行する必要があります。

于 2013-05-09T17:04:37.113 に答える