3

jQueryのドキュメントには、$。getJSONを使用してJSONPをリクエストする次の例がリストされています。

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
  function(data) {
    $.each(data.items, function(i,item) {
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if (i == 3) return false;
    });
  });

このパラメーターのために動的コールバック関数名を生成するこのメソッドを使用するのではなく、次のようにします。

jsoncallback=?

これを事前にハードコードされた関数名に設定できるようにしたいのですが、次のようになります。

jsoncallback=test

これは、スクリプトを実行し、返されるJSONPのJSONオブジェクトがtest()の呼び出しでラップされているという意味で機能します。

ただし、コールバック関数の設定方法がわかりません。これほど簡単ではないでしょうか。

function test(data) {
  console.log(data);
}

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=test");

それを試してみると、test()でラップされたJSONPが返されますが、定義した関数test()が呼び出されることはありません。私は何かが足りないのですか?

助けてくれてありがとう!

4

2 に答える 2

3

ドキュメントで定義されているように、次の方法を使用します

jQuery.getJSON(...)

callback=?JSONP呼び出しを行うときに指定する必要があります。私は通常、これを「json」の応答タイプにのみ使用します。「jsonp」の応答タイプには、次のものを使用します。

jQuery.get(...)

typeを「jsonp」として指定します。この件については、このドキュメントを参照してください。しかし、それはまた、を持たなければならないという事実によって拘束されcallback=?ます。

私があなたが探していると思うのはこれです:

jQuery.getScript(...)

で定義したメソッドを実行する必要がありますcallback

于 2009-10-22T16:14:52.973 に答える
1

ああ、「関連する」サイドバーセクションは私をここに救いました。この質問を提出した後、私はすでに尋ねられた同様の質問を見つけました:

Facebookリクエストの署名要求を満たすためにjQueryの$.getJSONのコールバックとして名前付き関数を使用する

10月15日からのダンカンの答えは私のためにこれを解決しました:

window.fixed_callback = function(data){
  alert(data.title);
};

$(function() {
  $.getScript("http://api.flickr.com/services/feeds/photos_public.gne?tags=cats&tagmode=any&format=json&jsoncallback=fixed_callback", function(data) {
  alert('done'); } );
});

キーは$.getJSONの代わりに$.getScriptを使用していると思います。$ .getScriptメソッドのパラメーターで匿名のコールバック関数を指定することもできます。これは、要求URLパラメーター(この場合は「fixed_callback」)で指定されたコールバック関数の後に実行されます。これが将来の誰かに役立つことを願っています。

于 2009-10-22T16:18:59.507 に答える