2011-02-15 33 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

一個循環將無法工作。

一種方法是進行相同類型的遞歸調用,並在成功回調(也許在某個超時後)再次觸發Ajax函數,如果條件不滿足。

類似的信息(僞代碼):

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

簡短而親切,我喜歡它!非常感謝,編輯我的問題,包括我得到的感謝您的幫助 – NightMICU 2011-02-15 01:34:14

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); 
});