jquery - 完全中止 ajax 和计时器
问题描述
我正在寻找中止 ajax 请求及其在函数内的计时器:
var run_timer;
var run;
function myrequest() {
if(run && run.readystate != 4){ run.abort(); }
run = $.ajax({
type:"POST",
url:"https://www.URL.com",
dataType: 'html',
data: "string=1",
timeout: 10000,
error: function(data) {
run.abort();
run_timer = setTimeout(function(){
myrequest()
}, 2000);
},
success: function(data){
alert('success')
}
});
}
function stop_request() {
clearTimeout(run_timer);
run.abort();
}
如果我调用 stop_request() 它会中止当前的 ajax 请求,但看起来定时器仍在运行,这会导致另一个请求。我如何完全停止它?
解决方案
当您调用ajax.abort()
(在您的情况下run.abort()
)时,您还会收到error:
and.fail()
回调-此时您开始一个新请求。
一个简单的console.log
或调试error:
将证实这一点。
因为run.abort()
立即运行(非异步),您可以在创建新计时器后取消它:
function stop_request() {
clearTimeout(run_timer);
run.abort(); // creates a new run_timer
clearTimeout(run_timer);
}
推荐阅读
- python - Tesseract 输出从非常清晰的图像中更改、添加和删除数字
- r - 将自定义输出层添加到 R 中的内置(功能)keras 模型
- javascript - 在 v-for 循环中从 [ ] 获取 "_id" 并在数据中重用它 // vuecli
- zip - 如何压缩论点,总是错的
- php - 更改特定 WooCommerce 端点上的文本字符串
- java - AppBarMainBinding.java / ContentMainBindind.java 构建错误
- java - Java标签和面板的区别以及如何使用?
- javascript - 如何让“msg.content”不断地添加新字符串而不是替换?
- c# - 获取严重性代码描述项目文件行抑制状态错误没有错误代码编号
- uno-platform - Uno 计算器不使用键盘上的 Enter 键(Ubuntu Snap)