使用 jQuery 请求 JSONP 时,我可以使用静态(即预先确定的)回调函数名称吗?
Posted
技术标签:
【中文标题】使用 jQuery 请求 JSONP 时,我可以使用静态(即预先确定的)回调函数名称吗?【英文标题】:Can I use a static (i.e., predetermined) callback function name when requesting JSONP with jQuery? 【发布时间】: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() 从未被调用。我错过了什么吗?
感谢您的帮助!
【问题讨论】:
【参考方案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”)。希望这对以后的人有所帮助。
【讨论】:
以上是关于使用 jQuery 请求 JSONP 时,我可以使用静态(即预先确定的)回调函数名称吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery 创建一个指定 contentType 的 jsonp POST 请求?