6

$.getJSON()文档指出:

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

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

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

所以看来,如果我$.getJSON()用跨域 URL 调用,额外的“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 论坛中交叉发布此内容。)

4

4 回答 4

8

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

于 2011-03-20T06:54:35.437 回答
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',
});
于 2010-03-12T03:32:52.537 回答
3

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

于 2010-03-12T03:42:51.417 回答
0

我正在使用下面的代码,

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

但是,回调有时会附加在 url 的末尾,有时不会在 IE 中。虽然它在 chrome 和 FF 中运行良好。

于 2016-02-18T08:15:13.017 回答