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"
URL看起来像这样:
https://api.bitbucket.org/.../?functionName=jquery1234_5678
但反应会是一样的。
如果你不希望jQuery生成函数名,你只需要jsonpCallback
。