【问题标题】:Can I use a static (i.e., predetermined) callback function name when requesting JSONP with jQuery?使用 jQuery 请求 JSONP 时,我可以使用静态(即预先确定的)回调函数名称吗?
【发布时间】:2010-12-09 03:52:28
【问题描述】:

jQuery documentation 列出了以下使用 $.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() 从未被调用。我错过了什么吗?

感谢您的帮助!

【问题讨论】:

    标签: javascript jquery ajax callback jsonp


    【解决方案1】:

    作为defined in the documentation供你使用以下方法

    jQuery.getJSON(...)
    

    您需要在进行 JSONP 调用时指定 callback=?。我通常只将它用于“json”的响应类型。对于“jsonp”的响应类型,您要使用:

    jQuery.get(...)
    

    并将type 指定为“jsonp”。请参阅此documentation on the subject。但这也受制于必须拥有callback=? 的事实。

    我认为你是looking for is this

    jQuery.getScript(...)
    

    应该执行您在callback 中定义的任何方法。

    【讨论】:

    • 非常感谢,尼克!估计我没找对地方。感谢您的帮助。
    【解决方案2】:

    啊,“相关”侧边栏部分救了我。在我提交这个问题后,我发现一个类似的问题已经问过:

    using a named function as the callback for $.getJSON in jQuery to satisfy Facebook request signing demands

    邓肯 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”)。希望这对以后的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 2013-05-10
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多