重复jQuery JSON请求,直到满足条件

时间:2011-02-15 01:01:04

标签: json jquery

问候,

我正在尝试在jQuery中重复JSON请求,以检查视频编码作业的状态,直到完成为止。 “处理”将一直显示,直到作业完成,此时将显示视频。

循环,每隔x秒检查“状态”是否等于“完成”,是否是最佳解决方案?如果是这样,当作业结束时,我将如何摆脱这种循环?

作业正在进行时的JSON响应只不过是“处理”,当它完成时它将包含诸如作业ID,宽度和高度之类的内容。

任何帮助将不胜感激,谢谢!

更新

感谢Felix,这是我的最终解决方案:

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

2 个答案:

答案 0 :(得分:12)

循环不起作用,因为Ajax请求是异步的。

一种方法是进行相同类型的递归调用,并从成功回调中再次触发Ajax函数(可能在一些超时后),如果条件不满足。

像(伪代码):

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

答案 1 :(得分: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);
});