为什么beforeSend中的jqXHR.abort()会抛出错误?

时间:2013-12-18 19:56:58

标签: javascript jquery

如果某些条件为真,我试图使用beforeSend中止ajax调用。

只要我致电jqXHR.abort()return false

我收到以下错误

TypeError: $.ajax(...).fail is not a function


.fail(function (jqXHR, textStatus, errorThrown) {

以下是javascript代码

        $.ajax({
                type: "POST",
                beforeSend: function (jqXHR) {
                    if (1 === 1) {
                        jqXHR.abort();
                    }
                },
                data: { x:1},
                url: 'echo/json'
            })
                .fail(function (jqXHR, textStatus, errorThrown) {

                    console.log("error"+textStatus)
                })
                .done(function (data) {
                    console.log("ajax complete");
                    console.log(data);
                });

jsfiddle:http://jsfiddle.net/939xG/

有谁知道为什么jqXHR.abort()在beforeSend thorws出错?

或者我如何更改beforeSend中的代码,以便我可以在没有任何错误的情况下中止ajax请求。

我使用的是jquery 1.7.2,无法升级到更高版本

1 个答案:

答案 0 :(得分:1)

当您在beforeSend中中止$.ajax时,$.ajax将返回false而不是jqXHR。通过不在beforeSend中中止,或者不使用完成和失败方法来支持使用成功和错误选项来避免它。

http://jsfiddle.net/939xG/2/

var jqXHR = $.ajax({
    type: "POST",
    beforeSend: function (jqXHR) {
        if (1 === 1) {
            jqXHR.abort();
        }
    },
    data: {
        x: 1
    },
    url: 'echo/json',
    success: function (data) {
        console.log("ajax complete");
        console.log(data);
    },
    error: function (jqXHR, textStatus, errorThrown) {

        console.log("error" + textStatus)
    }
});
console.log(jqXHR) // false

这对我来说听起来像个错误,但由于升级jquery不是一种选择,我没有考虑这种可能性。