2013-04-24 88 views
0

我有一些AJAX显示使用setInterval()获取脚本当前进度的进度条。我的问题是,当进度达到100%时,我似乎无法杀死它。我不确定这是否与范围有关,但我的处理程序是全局的,所以我无法弄清楚它为什么不起作用。以下是我的:Javascript - 清除间隔和设置间隔范围

function showLog(){ 
    document.getElementById('log').style.display = "block"; 
    clearInterval(inth); 
    return false; 
} 

function startAjax(){ 
    var inth = setInterval(function(){ 
     if (window.XMLHttpRequest){ xmlhttpp=new XMLHttpRequest();}else{ xmlhttpp=new ActiveXObject("Microsoft.XMLHTTP"); } 
     xmlhttpp.onreadystatechange=function(){ 
      if(xmlhttpp.readyState==4 && xmlhttpp.status==200){ 
       document.getElementById("sbar").innerHTML=xmlhttpp.responseText; 
      } 
     } 
     xmlhttpp.open("POST","scrape.php",true); 
     xmlhttpp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     var sitelist = document.getElementById('website').value; 
     var par = "website="+sitelist; 
     xmlhttpp.send(par); 
    }, 5000); 
    return false; 
} 

为什么clearInterval不起作用?我究竟做错了什么?

+0

哪里的代码决定什么时候达到100%? – 2013-04-24 06:48:42

+0

@Jack一旦进度达到100%,就会在'scrape.php'中打印。最初我尝试了一个'if(xmlhttpp.responseText ==“100%”)类型的东西,但是这样做效果不好。 – 2013-04-24 07:01:17

回答

2

这是一个范围问题,将函数外部的var inth声明为全局变量。并在startAjax函数中使用inth = setInterval(...)

正如你在你的问题中所说的,你的处理器是全局的。但是变量本身不是,所以它不能在函数的范围之外访问。

+0

太棒了!那么做了 – 2013-04-24 06:50:35

+0

@TunaFish很高兴帮助:) – Rob 2013-04-24 06:56:27