首页 > 解决方案 > 使用 Ajax 未定义 abort 或 readyState

问题描述

我得到了下面代码的错误;

未捕获的类型错误:无法读取未定义的属性“readyState”


当我尝试删除 readyState 以查看发生了该错误的情况时;

TypeError:无法读取未定义的属性“中止”

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();
    },

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

标签: javascriptjqueryajaxabortreadystate

解决方案


您应该ajaxReq在调用之前声明$.ajax().然后在尝试使用它之前检查它是否不为空,而不是使用像ToCancelPrevReq.

一旦你得到一个成功的响应,你可以重置它,以便下一次按键可以再次发出 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);
  }
});


推荐阅读