使用 Ajax 时 abort 或 readyState 未定义
2021-06-14
293
我收到以下代码的错误;
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();
},
按键发送请求很多次,我想确保成功过程只工作一次
2个回答
您应该在调用
$.ajax()
之前声明
ajaxReq
。然后在尝试使用它之前检查它是否不为空,而不是使用特殊值(如
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);
}
});
Barmar
2021-06-14
此代码解决了我的问题
我在 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);
}
});
}
idiltugba
2021-06-15