为什么jQuery不会自动附加JSONP回调?

时间:2010-03-10 06:18:02

标签: jquery jsonp

$.getJSON()文档声明:

  

如果指定的URL位于远程服务器上,则该请求将被视为JSONP。有关详细信息,请参阅$ .ajax()中jsonp数据类型的讨论。

jsonp数据类型的$.ajax()文档说明(强调我的):

  

使用JSONP加载JSON块。 会添加额外的“?callback =?”在您的网址末尾指定回调

因此,如果我使用跨域网址调用$.getJSON(),那么额外的“回调=?”参数应自动​​添加。 (文档的其他部分支持这种解释。)

但是,我没有看到这种行为。如果我不添加“callback =?”显式地,jQuery错误地生成XMLHttpRequest(由于我无法读取响应跨域,因此返回空数据)。如果我明确地添加它,jQuery正确地生成一个< script>请求。

以下是一个例子:

var URL = "http://www.geonames.org/postalCodeLookupJSON" +
    "?postalcode=10504&country=US";

function alertResponse(data, status) {
  alert("data: " + data + ", status: " + status);
}

$.getJSON(URL, alertResponse);
// alerts "data: null, status: success"

$.getJSON(URL + "&callback=?", alertResponse);
// alerts "data: [object Object], status: undefined"

那是怎么回事?我误解了文档还是遗忘了什么?

不言而喻,这不是一个大问题,但我正在创建一个Web API,我故意将回调参数设置为“回调”,希望能很好地适应jQuery的使用。

谢谢!

(如果您有兴趣,可以在jQuery论坛中编辑:cross-posted this。)

4 个答案:

答案 0 :(得分: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 :(得分:7)

原来这是jQuery文档中的一个错误。有关详细信息,请参阅http://forum.jquery.com/topic/getjson-isn-t-automatically-appending-callback-to-my-cross-domain-url

答案 2 :(得分:3)

是的,我觉得你误解了。正如文档所述,$.getJSON$.ajax({datatype: 'json'....的快捷方式。除非添加callback=?参数,否则它永远不会进行JSONP调用。

答案 3 :(得分:0)

我正在使用下面的代码,

$。AJAX({     网址:网址     dataType:'jsonp',     成功:功能(数据)     {      // 做一点事     }     错误:函数(jqXHR,textStatus,errorThrown){},     jsonpCallback:'login_callback', });

但是,回调有时会附加在url的末尾,有时不会在IE中。 虽然它在chrome和FF中工作正常。