2011-02-15 13 views
11

인사말, 내가이 완료 될 때까지 비디오 인코딩 작업의 상태를 확인하기 위해 jQuery를에 JSON 요청을 반복하려고반복 jQuery를 JSON 요청

을 충족. 작업이 완료 될 때까지 "처리 중"이 표시되며,이 때 비디오가 표시됩니다.

"상태"가 "완료 됨"인지 확인하기 위해 매 x 초마다 점검하는 루프가 가장 적합한 솔루션입니까? 그렇다면 작업이 끝나면 어떻게하면이 루프에서 벗어날 수 있습니까?

작업이 진행되는 동안 JSON 응답은 "처리 중"일뿐입니다. 작업이 완료되면 작업 ID, 너비 및 높이와 같은 정보가 포함됩니다.

감사합니다. 감사합니다.

UPDATE

여기 펠릭스 내 최종 솔루션 덕분이다 : Ajax 요청이 비동기로

var checkStatus = function() { 
    $.getJSON('json-data.php', function(data) { 
    if (data.status != 'finished') { 
      setTimeout(checkStatus, 2000); 
    } else { 
//Sample code to run when finished 
$("#statusText").text("Job Complete"); 
      $("#dimensions").text(data.width + 'x' + data.height); 
     } 
    }); 
    }; 
checkStatus(); 

답변

12

루프가 작동하지 않습니다.

한 가지 방법은 같은 종류의 재귀 호출을 작성하고 조건이 충족되지 않으면 success 콜백 (어쩌면 일부 시간 초과 후)에서 Ajax 함수를 다시 트리거하는 것입니다.

뭔가 같은 (의사 코드) :

function check_condition() { 
    $.getJSON(<url>, function(result) { 
     if(!result.finished) { 
      setTimeout(check_condition, 2000); 
     } 
     // do something else 
    } 
} 
+1

짧은 달콤한, 나는 그것을 좋아하지! 대단히 고마워요. 제 질문을 편집하여 도움을 얻은 것을 포함 시켰습니다. – NightMICU

1
var checkStatusInterval = 30 * 10000; // 30 seconds 
var checkStatusFunc = function(){ 
    $.getJSON('getMovieStatus', function(data){ 
    if (data.Incompleted){ // or however you check 
     checkStatusTimer = setTimeout(checkStatusFunc, checkStatusInterval); 
    } 
    }); 
}; 
var checkStatusTimer = setTimeout(checkStatusFunc,checkStatusInterval); 

중지 :

<input type="button" id="stopchecking" value="Stop Checking..." /> 
$('#stopchecking').click(function(e){ 
    clearTimeout(checkStatusTimer); 
});