为什么jQuery没有自动附加JSONP回调函数?

6
$.getJSON()文档说明:
如果指定的URL在远程服务器上,则将该请求视为JSONP。有关更多详细信息,请参见$.ajax()中jsonp数据类型的讨论。

$.ajax()中jsonp数据类型的文档说明(重点是我的):

使用JSONP加载JSON块。将在您的URL末尾添加一个额外的“callback =?”来指定回调。

因此,如果我使用跨域URL调用$.getJSON(),则应自动添加额外的“callback =?”参数。(文档的其他部分支持这种解释。)
但是,我没有看到这种行为。如果我不明确添加“callback =?”则jQuery会错误地进行XMLHttpRequest(由于无法跨域读取响应,因此返回null数据)。如果我明确添加它,则jQuery会正确地进行
4个回答

8

7

试试这个:

var URL = "http://www.geonames.org/postalCodeLookupJSON" +
    "?postalcode=10504&country=US";
function alertResponse(data, status) {
    alert("data: " + data + ", status: " + status);
}
$.ajax({
    url: URL,
    dataType: 'jsonp',
    jsonpCallback: 'alertResponse',
});

1
在你的例子中,实际上你是指 jsonpCallback: 'alertResponse',是的,在这种情况下,我无需显式地添加“callback =?”参数就可以工作。但是,这比$.getJSON()优雅的方式更加冗长。如果$.getJSON()按照文档说明正常工作将会很好... - Aseem Kishore

3

是的,我认为你误解了。正如文档所说,$.getJSON$.ajax({datatype: 'json'.... 的缩写。除非添加 callback=? 参数,否则它永远不会发出 JSONP 调用。


嗯...我真的误解了吗?我引用的那句话非常明确:“如果指定的URL在远程服务器上,则将该请求视为JSONP。” - Aseem Kishore

0
我正在使用以下代码, $.ajax({ url: URL, dataType: 'jsonp', success: function ( data ) { // 做一些事情 } error: function (jqXHR, textStatus, errorThrown) { }, jsonpCallback: 'login_callback', });
但是,在IE中,回调有时会附加在URL的末尾,有时不会。 而在Chrome和FF中运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接