javascript - 使用 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();
},
按键是多次发送请求,我想确保成功过程只工作一次
解决方案
您应该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);
}
});
推荐阅读
- wpf - WPF(4.8) ContentControl中可以使用两个ControlTemplates吗?(如嵌套模板)
- python - 如何从一列循环每一行并搜索该字符串是否存在于第二个excel的另一列中
- php - Drupal 8:我们可以在自定义模块中使用具有自己模板的多个块吗?
- c# - 重定向不重定向到指定的操作
- javascript - 在 Chart.js 中为一个数据集中的单个点设置样式
- symfony - Symfony - Form - IntegerType 接受 1.00 (x.00) 值作为有效值
- encryption - 如何确保我发送了加密消息?
- python - 为什么 pytest 不运行作为参数传递给测试函数的 conftest.py 函数?
- .net - 具有特定区域和缩放功能的可缩放墨卡托 SVG 像素转换器 (VB.NET)
- python - 使用 ipyvuetify 突出显示文本