Javascript 停止循环函数设置超时
我有一个使用setTimeout的循环,如下所示:Javascript 停止循环函数设置超时,javascript,loops,settimeout,Javascript,Loops,Settimeout,我有一个使用setTimeout的循环,如下所示: <button onclick="clickStop()">stop</button> <script type="text/javascript"> let i = 0; let sett; function timeOut(counter) { sett = setTimeout(function () { $.get("./test
<button onclick="clickStop()">stop</button>
<script type="text/javascript">
let i = 0;
let sett;
function timeOut(counter) {
sett = setTimeout(function () {
$.get("./test3.php", {data_id: counter}, (data) => {
console.log(data);
i++;
timeOut(i);
});
}, 1000);
if(counter >= 10) {
clearTimeout(sett);
alert("Done!");
}
}
timeOut(i);
function clickStop() {
clearTimeout(sett);
}
</script>
停止
设i=0;
让塞特;
函数超时(计数器){
sett=setTimeout(函数(){
$.get(“./test3.php”,{data\u id:counter},(data)=>{
控制台日志(数据);
i++;
超时(i);
});
}, 1000);
如果(计数器>=10){
清除超时(sett);
警报(“完成!”);
}
}
超时(i);
函数clickStop(){
清除超时(sett);
}
但当我点击“停止”按钮时,它不起作用,帮帮我 您的JS似乎工作正常,请参见下文,当我单击“停止”按钮时,计数器将递增并停止。问题在于
$.get(“./test3.php”…
您能否详细说明ajax调用的预期响应是什么
另外,如果您可以描述您正在尝试做什么,我们可以给您一些关于最佳实践的建议,因为正如那些评论的人所说,在循环中运行XHR/ajax调用通常不是一个好主意
停止
设i=0;
让塞特;
函数超时(计数器){
sett=setTimeout(函数(){
超时(计数器+1);
控制台日志(计数器);
}, 1000);
如果(计数器>=10){
清除超时(sett);
警报(“完成!”);
}
}
超时(i);
函数clickStop(){
清除超时(sett);
}
您可以清除超时,还可以设置一个标志,该标志将在$中提醒回调。获取当回调返回时,它不应调用timeout()
:
设i=0;
让塞特;
让active=true//循环是否应继续?
函数超时(计数器){
如果(计数器<10){
sett=setTimeout(函数(){
$.get(“./test3.php”,{data\u id:counter},(data)=>{
控制台日志(数据);
i++;
如果(活动)超时(i);//仅当活动时
});
}, 1000);
}否则{
警报(“完成!”);
}
}
超时(i);
函数clickStop(){
活动=假//停止循环
clearTimeout(sett);//并清除当前超时
}
您在$中拥有的超时(i)
。get
响应处理程序将重新启动循环,即使您停止了它。
您可以使用一个标志来控制它
设i=0;
让塞特;
让status=true;
让url=”http://placekitten.com/200/300";
函数超时(计数器){
sett=setTimeout(函数(){
$.get(url,(数据)=>{
控制台日志(i);
i++;
//如果状态标志为true,则重复此操作
如果(状态)超时(i);
});
}, 1000);
如果(计数器>=10){
清除超时(sett);
status=false;//将status标志设置为false
警报(“完成!”);
}
}
函数clickStop(){
清除超时(sett);
status=false;//将status标志设置为false
}
超时(i);
停止
是什么让你认为它不起作用的?我正在尝试,但它不起作用../test3.php需要2~3秒才能返回结果。当我在../test3过程中按stop时,它将不起作用。当你说它不起作用时,请说清楚。什么不起作用?这将非常脆弱,因为如果你在测试之前取消超时$.get
返回,回调将在它$时再次启动。get
调用回调。也许你可以让单击停止
设置一个在$调用函数之前选中的标志。get
调用函数。因此,只需一个提示,通常不应在循环中进行XHR调用。它可能会变得昂贵,或者不好。get(“/test3.php”…
返回结果大约需要2~3秒。单击“停止”或最后一次XHR调用完成后,如何停止?