Jquery 清除间隔和范围
这里有一些时间间隔的问题 基本的意思是我有一个进度条函数,每行1个,从后端脚本获取信息。在ajax调用的间隔内,我每5秒ping一次这个脚本 这是可行的,但是在多次(即,第二个进度条调用相同的函数)或当项目“关闭”(div幻灯片)时,它应该停止存在问题。这是一段非常复杂的代码,因此我将尽最大努力提取必要的部分,但请注意,目前来看,这可能不会运行 一次完整的演练-已更改函数名称以保护无辜者:) onlcick,div打开,调用此启动函数:Jquery 清除间隔和范围,jquery,intervals,Jquery,Intervals,这里有一些时间间隔的问题 基本的意思是我有一个进度条函数,每行1个,从后端脚本获取信息。在ajax调用的间隔内,我每5秒ping一次这个脚本 这是可行的,但是在多次(即,第二个进度条调用相同的函数)或当项目“关闭”(div幻灯片)时,它应该停止存在问题。这是一段非常复杂的代码,因此我将尽最大努力提取必要的部分,但请注意,目前来看,这可能不会运行 一次完整的演练-已更改函数名称以保护无辜者:) onlcick,div打开,调用此启动函数: function start(ID){ var reque
function start(ID){
var request = $.ajax({
url: "script?DO=Start&ID="+ID
, type: "GET"
, cache: false
, dataType: "text"
});
request.done(function(msg) {
startLoop(ID);
});
request.fail(function(jqXHR, textStatus) {
//alert("Request failed: " + textStatus );
});
}
如您所见,这将调用StartOOP fnc,它将继续ping更新信息脚本(getInfo())以获取信息:
function startLoop(ID){
var i = setInterval(function(){
var xstatus = getInfo(ID);
//other stufff that works
if(xstatus=="done"){
clearInterval(i);
}
}, 5000);
}
这本身就很好
如果第二次单击事件打开第二个窗口,则它只会有一个新ID并调用相同的函数
因此,我有一个间隔,摧毁一个似乎可以阻止一切。
我是否应该将i转换为对象,如i.ID
另外,当停止时,我有一个onclick=stop()调用,从循环外部看,我似乎无法停止它
我如何重新安排以使其工作
它应该支持一个或多个同时项目的启动、停止和自动更新 为什么不使用
setTimeout
而不是clearInterval
,因为您已经将终止间隔的责任放在了它的回调中:
// using this approach might require changing the name of this function
function startLoop(ID) {
setTimeout(function(){
var xstatus = getInfo(ID);
//other stufff that works
if(xstatus!=="done"){
startLoop(ID); // do it all over again if it's not complete
}
}, 5000);
}
这将给你同样的行为,但有几个额外的奖金。首先,这不应该导致你的其他工作在一项工作完成后被终止。另一个是,这将异步运行,因此,如果请求开始需要5秒以上的时间才能完成,则超时在返回后5秒内不会再次ping它,而不是每5秒盲目触发一次,无论请求是否已完成。为什么不使用
setTimeout
而不是clearInterval
,由于您已经将终止间隔的责任放在其回调中:
// using this approach might require changing the name of this function
function startLoop(ID) {
setTimeout(function(){
var xstatus = getInfo(ID);
//other stufff that works
if(xstatus!=="done"){
startLoop(ID); // do it all over again if it's not complete
}
}, 5000);
}
这将给你同样的行为,但有几个额外的奖金。首先,这不应该导致你的其他工作在一项工作完成后被终止。另一个是,这将异步运行,因此,如果请求开始需要5秒以上的时间才能完成,则超时在返回后的5秒内不会再次ping它,而不是每5秒盲目触发一次,无论请求是否已完成。hrm。。。我orig把它作为setTimeout,并被告知这不是一种方法,间隔是更明智的方法。这是否支持多个呼叫?ID=1和ID=2调用同一个函数(因此,xstatus以两个不同的间隔响应)?为什么要使用setTimeout“not the way to go?”它应该适用于多个调用;该ID由超时回调关闭,并在每次迭代中向前发送,并在每次调用StartOOP时单独维护。我在本地进行了测试,两个这样的循环方案并排运行似乎很好。谢谢你的建议。我会在这里工作,并报告我的结果(有大量的工作正在进行),这似乎工作得更好。谢谢你的指导。人力资源管理。。。我orig把它作为setTimeout,并被告知这不是一种方法,间隔是更明智的方法。这是否支持多个呼叫?ID=1和ID=2调用同一个函数(因此,xstatus以两个不同的间隔响应)?为什么要使用setTimeout“not the way to go?”它应该适用于多个调用;该ID由超时回调关闭,并在每次迭代中向前发送,并在每次调用StartOOP时单独维护。我在本地进行了测试,两个这样的循环方案并排运行似乎很好。谢谢你的建议。我会在这里工作,并报告我的结果(有大量的工作正在进行),这似乎工作得更好。谢谢你的指导。