$.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。)
答案 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中工作正常。