2013-04-27 4 views
2

get_user_record()이 함수는 데이터베이스에서 데이터를 가져 오는 메소드를 호출합니다. 이 메서드는 응답을 원하지 않기 때문에 시간 제한을 사용했습니다. showUpdatedProgressBar() 메서드는 데이터베이스 수를 계속 확인하고 그에 따라 진행률 표시 줄에 값을 지정합니다. 그 목적을 위해 작동하는 setInterval() 함수를 사용했지만 간격을 지울 수 없었습니다. 제 잘못을 제게 제안 해주세요.Javascript clearInterval() 간격을 지울 수 없습니다.

function get_user_record(){ 
     $.ajax({ 
       url:"/GetData", 
       type: "GET", 
       timeout: 2000, 
       success:function(result){ 
        //alert('success'); 
       }, 
       error: function(xhr, status, err){ 
        //alert('Connection Error. Please try again.') 
       } 

      }); 
      var timer = 0; 
      showUpdatedProgressBar(timer); 
     } 

    } 
    function showUpdatedProgressBar(timer){ 

     $.ajax({ 
      url:"/get_updated_data", 
      type: "GET", 
      success:function(result){ 
       result = result.split(','); 
       var obj = {totalRecords: result[0], recordsTaken: result[1]}; 
       var bar_value = obj.recordsTaken/obj.totalRecords * 100; 
       $("#progressbar").progressbar({ value: bar_value }); 

       if(obj.recordsTaken == obj.totalRecords){ 
        clearInterval(timer);     
       } 
       else 
       { 
        timer = setInterval(function(){ showUpdatedProgressBar(timer) },1000); 
       } 
      }   
     }); 
    } 
+0

마지막 recordTaken == totalRecords 일 때, 그 시점에서 아약스는 성공한 것이 아니라 완료되었을 수 있습니다. 귀하의 아약스에 완성을 추가하고 시험을 해보십시오. –

답변

2

이전에 var timer를 로컬로 정의하고 0으로 설정했습니다. 이제 var timer를 정의하면됩니다. 전역 적으로 0으로 설정하지 마십시오.

1

= setInterval을 타이머 (함수() {showUpdatedProgressBar (타이머)}, 1,000);

타이머는 모든 반복적 반복 (덮어 쓰기)마다 새로운 간격 ID가 할당됩니다. 따라서 마지막으로 생성 된 ID 만 clearInterval에 사용됩니다.

+1

'timer'는'clearInterval()'이 호출 될 때 항상 0입니다. – zeroflagL