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

链接地址: http://www.djcxy.com/p/47543.html

上一篇: jQuery JSONP Callback not firing

下一篇: How to call Windows API functions in JScript?