URL にコールバック プロパティが含まれている場合、getJSON
メソッドは JSONP 呼び出しを行います。
「URL に文字列 "callback=?" (またはサーバー側 API で定義されている同様のもの) が含まれている場合、リクエストは代わりに JSONP として扱われます。」
参照: http://api.jquery.com/jQuery.getJSON/
リクエストは正常に動作し、データはブラウザに到着しますが、レスポンスは JSONP ではなく JSON であるため、データは単に破棄され、成功のコールバック メソッドは呼び出されません。
format=json
URLをに変更しようとしformat=jsonp
ましたが、応答はエラー メッセージです。
<fault>
<faultstring>Fault raised in a policy</faultstring>
<detail>
<errorcode>31326</errorcode>
<trace>
Fault Name: JSONP Bad Request
Error Type: MessageRouter
Description: Fault raised in a policy
Service: worldbank
Endpoint: target
Operation (Target):defaultOperation
FlowTransitionState : Target_Request_User_Error
Policy : EnforceMediationOnRequestPolicy
RaiseFaultAssertion
</trace>
</detail>
</fault>
JSON リクエストの代わりに JSONP リクエストを作成する方法については、API プロバイダーに確認する必要があります。
編集:
Jimmy Oliger が言うように、API は のprefix
代わりにプロパティを使用しますcallback
。私はこれを試しました.jQueryは実際にそのプロパティを代わりに使用し、成功のコールバックが呼び出されます.
応答は、最初の項目がページング情報で、2 番目の項目がデータを含む配列であるため、ループjson[1]
してデータを表示する配列です。
デモ: http://jsfiddle.net/Guffa/3JRU6/4/
var url = 'http://api.worldbank.org/topic/4?per_page=10&format=jsonp&prefix=?';
var query;
$('button').click(function() {
$.getJSON(url, function(json) {
$.each(json[1], function(i, data) {
$("#results").append('<p>' + data.value + '</p>');
});
});
});