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

Ase*_*ore 6 jquery jsonp

$.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"
Run Code Online (Sandbox Code Playgroud)

发生什么了?我误解了文档还是遗忘了什么?

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

谢谢!

(编辑:如果你有兴趣,我会在jQuery论坛中交叉发布.)

Pet*_*dIt 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',
});
Run Code Online (Sandbox Code Playgroud)


Ase*_*ore 7

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