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”的响应类型。对于“jsonp”的响应类型,您要使用:

jQuery.get(...)

并将 type 指定为“jsonp”。请参阅此有关该主题的文档。但这也受到必须拥有 callback =?这一事实的约束。

我认为你正在寻找这个

jQuery.getScript(...)

哪个应该执行您在回调中定义的任何方法。

其他提示

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

使用一个命名函数作为jQuery中$ .getJSON的回调,以满足Facebook请求签名要求

Duncan在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归因
不隶属于 StackOverflow
scroll top