簡體   English   中英

在使用jQuery請求JSONP時,我可以使用靜態(即預定的)回調函數名稱嗎?

[英]Can I use a static (i.e., predetermined) callback function name when requesting JSONP with jQuery?

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(...)

你需要指定callback=? 在進行JSONP調用時。 我通常只將它用於“json”的響應類型。 對於“jsonp”的響應類型,您要使用:

jQuery.get(...)

並將type指定為“jsonp”。 請參閱有關該主題的文檔 但這也受到必須要callback=?的事實的約束callback=?

我認為你在尋找的是

jQuery.getScript(...)

哪個應該執行你在callback定義的任何方法。

啊,“相關”側欄欄節省了我這里。 在我提交這個問題之后,我發現了一個類似的問題:

使用命名函數作為jQuery中$ .getJSON的回調來滿足Facebook請求簽名要求

鄧肯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'); } );
});

我猜關鍵是使用$ .getScript而不是$ .getJSON。 仍然可以在$ .getScript方法的參數中指定匿名回調函數,該函數將在請求URL參數中指定的回調函數之后執行(在本例中為“fixed_callback”)。 希望這有助於有人在路上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM