jQuery JSONP Callback not firing
我正在使用jquery发出一个跨域Ajax请求,但我的回调函数没有启动(请参见http://jsfiddle.net/zc8z5/)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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' }); |
根据文件:
As of jQuery 1.5, setting the jsonp option to false prevents jQuery
from adding the"?callback" string to the URL or attempting to use
"=?" for transformation. In this case, you should also explicitly set
the jsonpCallback setting. For example, { jsonp: false, jsonpCallback:
"callbackName" }
但是,如果我不指定回调,而只在成功事件中处理数据,它就可以工作(请参见http://jsfiddle.net/2gbrt/)。
1 2 3 4 5 6 7 8 9 10 | $.ajax({ url: url, dataType: 'jsonp', error: function(xhr, status, error) { alert(error); }, success: function(data) { jsonpCallback(data); } }); |
我是否误解了如何使用jquery发出jsonp请求?
正如您摘录的文档中所指出的,如果服务器希望得到一个名为EDCOX1(0)的参数,jQuery就足够智能为您填充空白。BitBucket确实使用了这个参数名,因此您可以得到如下的URL:
1 | https://api.bitbucket.org/.../?callback=jquery1234_5678 |
1 2 3 4 5 | jquery1234_5678({ "node":"someId", "path":"filename", "data":"content" }) |
所以函数被调用。此外,您还可以将成功部分简化(演示)为:
1 | success: jsonpCallback |
如果bitback需要一个不同的参数名,您可以将其用作jsonp的值。例如,如果您通过了:
1 | jsonp:"functionName" |
URL看起来像:
1 | https://api.bitbucket.org/.../?functionName=jquery1234_5678 |
但反应是一样的。
如果不希望jquery生成函数名,只需要