Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的设置超时在我清除时不停止?_Javascript_Jquery_Ajax_Settimeout - Fatal编程技术网

Javascript 为什么我的设置超时在我清除时不停止?

Javascript 为什么我的设置超时在我清除时不停止?,javascript,jquery,ajax,settimeout,Javascript,Jquery,Ajax,Settimeout,当我从我的ajax帖子收到数据时,我试图停止超时。然而,我得到了数据回来,它更新了我的html,但计时器仍然在运行。怎么了 function getResponse() { var i = 0; var reply = null; var myTimer; while (i < 24 && reply == null) { (function(i) { myTimer = setTimeout(function() { $.ajax(

当我从我的ajax帖子收到数据时,我试图停止超时。然而,我得到了数据回来,它更新了我的html,但计时器仍然在运行。怎么了

function getResponse() {

var i = 0;
var reply = null;
var myTimer;

while (i < 24 && reply == null) {
  (function(i) {
        myTimer = setTimeout(function() {
        $.ajax({
            url: '/getResponse',
            data: "123456",
            type: 'POST',
            success: function (data) {
                console.log("HERE data2 " + data);
                if(data != "" || data != null){
                    reply = data;
                    document.getElementById("responseText").innerHTML = reply;
                    clearTimeout(myTimer);
                }
            },
            error: function (error) {
                document.getElementById("responseText").innerHTML = error;
                console.log(error);
            }

        });           

    }, 5000 * i)
  })(i++)
}
函数getResponse(){
var i=0;
var-reply=null;
var-myTimer;
而(i<24&&reply==null){
(职能(一){
myTimer=setTimeout(函数(){
$.ajax({
url:“/getResponse”,
数据:“123456”,
键入:“POST”,
成功:功能(数据){
console.log(“此处数据2”+数据);
如果(数据!=“”| |数据!=null){
答复=数据;
document.getElementById(“responseText”).innerHTML=reply;
clearTimeout(myTimer);
}
},
错误:函数(错误){
document.getElementById(“responseText”).innerHTML=错误;
console.log(错误);
}
});           
},5000*i)
})(i++)
}

在while循环的每次迭代中,您都会覆盖全局
myTimer
变量。因此,每次执行
clearTimeout(myTimer)时
您只是在清除上次setTimeout的超时,该超时在
i
变为
23
时运行,而不是在while循环的前22次迭代中创建的setTimeout。实际上,您必须在while循环的iLife中声明myTimer变量,如下所示,以清除所有23次setTimeout的超时在while循环中执行以下操作:

function getResponse() {

var i = 0;
var reply = null;
// var myTimer;

while (i < 24 && reply == null) {
  (function(i) {
        var myTimer = setTimeout(function() { // Declare myTimer here
        $.ajax({
            url: '/getResponse',
            data: "123456",
            type: 'POST',
            success: function (data) {
                console.log("HERE data2 " + data);
                if(data != "" || data != null){
                    reply = data;
                    document.getElementById("responseText").innerHTML = reply;
                    clearTimeout(myTimer);
                }
            },
            error: function (error) {
                document.getElementById("responseText").innerHTML = error;
                console.log(error);
            }

        });           

    }, 5000 * i)
  })(i++)
}
函数getResponse(){
var i=0;
var-reply=null;
//var-myTimer;
而(i<24&&reply==null){
(职能(一){
var myTimer=setTimeout(函数(){//在此处声明myTimer
$.ajax({
url:“/getResponse”,
数据:“123456”,
键入:“POST”,
成功:功能(数据){
console.log(“此处数据2”+数据);
如果(数据!=“”| |数据!=null){
答复=数据;
document.getElementById(“responseText”).innerHTML=reply;
clearTimeout(myTimer);
}
},
错误:函数(错误){
document.getElementById(“responseText”).innerHTML=错误;
console.log(错误);
}
});           
},5000*i)
})(i++)
}

它已被清除。但您一遍又一遍(23次)调用您的函数,每次都设置新的超时并再次清除它。

您能
控制台.log
myTimer吗?