首页 > 解决方案 > 完全中止 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 请求,但看起来定时器仍在运行,这会导致另一个请求。我如何完全停止它?

标签: jqueryajaxfunction

解决方案


当您调用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);
}

推荐阅读