jQuery AJAX 错误回调不是 运行

jQuery AJAX error callback not running

我有一个 AJAX 调用如下:

    $.ajax({
        type: "get",
        url: "xxx.xxx.xxx/xxx.js",
        dataType: 'jsonp',
        success: function(data) {
            console.log("success");
        }
    }).done(function(data){
        console.log("done");
    }).fail(function(data){
        console.log("fail");
    }).always(function(){
        console.log("always")
    });

当调用成功时,successdone函数运行。但是,当调用失败时(比如当我将 url 更改为 gobbledygook 时)什么都没有 运行,甚至 always 也没有。

该行为在 Firefox 和 Chrome 中都会发生。

我看到很多其他人提到 JSONP 有问题,接受的答案是 async: false 会起作用,但 async: falseasync: true 成功了。

这似乎是什么问题?

一个可行的解决方法是添加 timeout.

$.ajax({
    type: "get",
    url: "xxx.xxx.xxx/xxx.js",
    dataType: 'jsonp',
    success: function(data) {
        console.log("success");
    },
    timeout: 5000
}).done(function(data){
    console.log("done");
}).fail(function(data){
    console.log("fail");
}).always(function(){
    console.log("always")
});

然后 5 秒后,error/always 起作用。