jQueryでJSONPをリクエストするときに、静的(つまり、事前に定義された)コールバック関数名を使用できますか?
-
05-07-2019 - |
質問
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」)の後に実行されます。これが将来の誰かを助けることを願っています。