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

$.getJSON()文档说明:

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

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

使用JSONP加载JSON块。 会添加一个额外的“?callback =?” 到URL的末尾以指定回调

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

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

这是一个例子:

 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论坛中交叉发布 。)

试试这个:

 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', }); 

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

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

我使用下面的代码,

$ .ajax({url:URL,dataType:’jsonp’,success:function(data){// do something} error:function(jqXHR,textStatus,errorThrown){},jsonpCallback:’login_callback’,});

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