jQuery JSONP回调没有开火
我正在使用jQuery进行跨域AJAX请求,但是我的回调函数未触发(请参阅http://jsfiddle.net/zC8z5/)。
function jsonpCallback(response){
$('#code').text(response.data);
}
$.ajax({
url: url,
dataType: 'jsonp',
error: function(xhr, status, error) {
alert(error);
},
success: function() {
alert("success");
},
jsonp: false,
jsonpCallback: 'jsonpCallback'
});
根据文档:
从jQuery 1.5开始,将jsonp选项设置为false会阻止jQuery将“?callback”字符串添加到URL或尝试使用“=?”。 进行转化。 在这种情况下,您还应该明确设置jsonpCallback设置。 例如,{jsonp:false,jsonpCallback:“callbackName”}
但是,如果我没有指定回调,而只是处理成功事件中的数据,它就会起作用(请参阅http://jsfiddle.net/2gBRT/)。
$.ajax({
url: url,
dataType: 'jsonp',
error: function(xhr, status, error) {
alert(error);
},
success: function(data) {
jsonpCallback(data);
}
});
我误解了如何使用jQuery创建JSONP请求吗?
正如您在摘录的文档中指出的那样,如果服务器期望一个名为callback
的参数,那么jQuery足够聪明,可以为您填充空白。 Bitbucket确实使用这个参数名称,所以你得到一个URL:
https://api.bitbucket.org/.../?callback=jquery1234_5678
jquery1234_5678
实际上是您的回调自动生成的函数名称。 Bitbucket然后返回如下所示的内容:
jquery1234_5678({
"node": "someId",
"path": "filename",
"data": "content"
})
所以这个函数被调用。 另外,您可以简化(演示)成功部分:
success: jsonpCallback
如果Bitbucket预期使用不同的参数名称,则可以使用它作为jsonp的值。 举例来说,如果您通过:
jsonp: "functionName"
该网址看起来像这样:
https://api.bitbucket.org/.../?functionName=jquery1234_5678
但答复是一样的。
如果你不想让jQuery生成函数名,你只需要jsonpCallback
。