0

このフィドルを見てください:http://jsfiddle.net/3JRU6/

$(document).ready(function(){
var url='http://api.worldbank.org/topic/4?per_page=10&format=json&callback=?';
var query;
  $('button').click(function(){
    $.getJSON(url,function(json){
      $.each(json.results,function(i,data){
          window.alert("found");
         $("#results").append('<p>'+data.value+'</p>');
      });
    });
  });
});​

世界銀行のオープンデータに接続したいのですが、ボタンを押しても何も起こりません。Twitter API で同じスクリプトを試したところ、うまくいきました。元のリンクには &callback=? がありません。エラーが発生したため、追加する必要がありました。

前もって感謝します!

4

2 に答える 2

4

URL にコールバック プロパティが含まれている場合、getJSONメソッドは JSONP 呼び出しを行います。

「URL に文字列 "callback=?" (またはサーバー側 API で定義されている同様のもの) が含まれている場合、リクエストは代わりに JSONP として扱われます。」

参照: http://api.jquery.com/jQuery.getJSON/

リクエストは正常に動作し、データはブラウザに到着しますが、レスポンスは JSONP ではなく JSON であるため、データは単に破棄され、成功のコールバック メソッドは呼び出されません。

format=jsonURLをに変更しようとし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>');
        });
    });
});
于 2012-08-14T09:50:36.397 に答える
3

Wordbank API は、このcallback属性を使用して応答を出力しません。URL の末尾JSONPに追加して機能させる必要があります。format=jsonP&prefix=?

「リクエスト形式」の詳細については、こちらを参照してください。

var url = 'http://api.worldbank.org/topic/4?per_page=10&format=jsonP&prefix=?';

$.getJSON(url, function(data) {
  console.log(data);
});​
于 2012-08-14T09:48:34.683 に答える