2013-04-24 7 views
0

setInterval()을 사용하여 진행률 표시 줄에 현재 진행 상황을 보여주는 AJAX가 있습니다. 내 문제는 진행률이 100 %에 도달하면 그것을 죽일 수없는 것입니다. 이것이 범위와 관련이 있는지 확신 할 수 없지만 내 처리기가 전역이므로 작동하지 않는 이유를 알 수 없습니다. 다음은 내가 가지고있는 것입니다.Javascript - 간격 및 setinterval 범위 지우기

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 % 도달 시점을 결정하는 코드는 어디에 있습니까? –

+0

@Jack 진행률이 100 %에 도달하면 'scrape.php'에 인쇄됩니다. 원래 나는'if (xmlhttpp.responseText == "100 %")'유형의 것을 시도했지만 그렇게 잘되지 않았습니다. –

답변

2

이것은 범위 문제이며 함수 외부의 var inth을 전역 변수로 선언하십시오. startAjax 함수에서 inth = setInterval(...)을 사용하십시오.

질문에 말씀 하셨듯이 처리기는 전역입니다. 그러나 변수 자체는 그렇지 않으므로 함수 범위를 벗어나 액세스 할 수 없습니다.

+0

Brilliant! 그랬어 –

+0

@ TunaFish 도움이 된 것을 기쁘게 생각합니다 :) – Rob