jQueryでJSONPをリクエストするときに、静的(つまり、事前に定義された)コールバック関数名を使用できますか?

StackOverflow https://stackoverflow.com/questions/1608302

質問

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()が呼び出されることはありません。何か不足していますか?

ご協力ありがとうございます!

役に立ちましたか?

解決

次の方法を使用するためのドキュメントとして

jQuery.getJSON(...)

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

jQuery.get(...)

type を&quot; jsonp&quot;として指定します。この件名に関するドキュメントを参照してください。しかし、それは callback =?を持たなければならないという事実にも縛られています。

あなたが探しているものはこれです

>
jQuery.getScript(...)

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

他のヒント

ああ、「関連」サイドバーセクションはここで私を救った。この質問を送信した後、すでに質問された同様の質問が見つかりました:

using 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」)の後に実行されます。これが将来の誰かを助けることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top