Javascript 为什么我的设置超时在我清除时不停止?
当我从我的ajax帖子收到数据时,我试图停止超时。然而,我得到了数据回来,它更新了我的html,但计时器仍然在运行。怎么了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(
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吗?