Ajax 中止或 readyState 未定义

abort or readyState is undefined with Ajax

我收到以下代码的错误;

Uncaught TypeError: Cannot read property 'readyState' of undefined


当我尝试删除 readyState 以查看我遇到该错误时发生了什么;

TypeError: Cannot read property 'abort' of undefined

get: function () {
    var ajaxReq = $.ajax({
            type: 'GET',
            url: data.url,
            dataType: "json",
            success: function (response, status) {
                callback(response);
            },
            beforeSend: function () {
                if (ajaxReq != 'ToCancelPrevReq' && ajaxReq.readyState < 4) {
                    ajaxReq.abort();
                }
            }
        });
}

该功能与按键一起使用;

keypress: function () {
        setTimeout(function () {
            if ($(OnePageCheckout.Selector.CardNumber).val().length == 7) {
                $(".payment-installment-container").removeClass("d-none");
                InvUtility.Loader.Open();
                var model = {
                    value: $(OnePageCheckout.Selector.CardNumber).val()
                }

                OnePageCheckout.OnCardNumberUpdate.event(model);
            }
        }, 1000)
        OnePageCheckout.OnCardNumberUpdate.init();
    },

按键发送请求很多次,我想确保成功过程只工作一次

您应该在调用 $.ajax(). 之前声明 ajaxReq 然后在尝试使用它之前检查它是否不为空,而不是使用像 ToCancelPrevReq.[=14 这样的特殊值=]

一旦获得成功响应,您可以将其重置,以便下一次按键可以再次发出 AJAX 请求。

var ajaxReq;
...
if (ajaxReq && ajaxReq.readyState < 4) {
  ajaxReq.abort();
}

$.ajax({
  type: 'GET',
  url: data.url,
  dataType: "json",
  success: function(response, status) {
    ajaxReq = null;
    callback(response);
  }
});

这段代码解决了我的问题

我在 get 函数之外定义了变量。如果我在GET函数中定义它,它会被当作一个新的事务,因为它每次都会被清空。所以在相关函数之外定义它给出了正确的结果

var jqxhr = {abort: function () {}};

get: function(){    
  jqxhr.abort();
    var ajaxReq = $.ajax({
        type: 'GET',
        url: data.url,
        dataType: "json",
        success: function (response, status) {
            callback(response);
        }
    });
}