我正在使用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请求?
答案 0 :(得分:7)
正如您摘录的文档中所述,如果服务器需要一个名为callback
的参数,那么jQuery足够聪明,可以为您填写空白。 Bitbucket确实使用此参数名称,因此您可以获得如下的URL:
https://api.bitbucket.org/.../?callback=jquery1234_5678
jquery1234_5678
实际上是一个自动生成的回调函数名称。 Bitbucket然后返回类似的东西:
jquery1234_5678({
"node": "someId",
"path": "filename",
"data": "content"
})
所以调用该函数。此外,您可以简化(demo)成功部分:
success: jsonpCallback
如果Bitbucket期望一个不同的参数名称,你可以使用它作为jsonp的值。例如,如果您通过了:
jsonp: "functionName"
网址如下所示:
https://api.bitbucket.org/.../?functionName=jquery1234_5678
但反应是一样的。
如果您不希望jQuery生成函数名,则只需要jsonpCallback
。