Повторите JQuery JSON-запрос, пока условие не будет выполнено - PullRequest
12 голосов
/ 15 февраля 2011

Привет,

Я пытаюсь повторить JSON-запрос в jQuery, чтобы проверить состояние задания кодирования видео до его завершения.«Обработка» будет отображаться до тех пор, пока работа не будет завершена, и в этот момент будет отображаться видео.

Будет ли цикл, проверяющий каждые x секунд, чтобы убедиться, что «состояние» равно «закончен», «будет лучшим решением»за это?Если да, то как мне выйти из этого цикла, когда задание будет завершено?

Ответ JSON во время выполнения задания будет не более чем «обработкой», когда он будет завершен, он будет содержать такие вещи, каккак идентификатор работы, ширина и высота.

Любая помощь будет оценена, спасибо!

ОБНОВЛЕНИЕ

Вот мое окончательное решение благодаря Феликсу:

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 ]

12 голосов
/ 15 февраля 2011

Цикл не будет работать, поскольку запрос Ajax является асинхронным.

Один из способов - сделать такой же рекурсивный вызов и снова вызвать функцию Ajax из обратного вызова success (возможно, через некоторое время)если условие не выполняется.

Что-то вроде (псевдокод):

function check_condition() {
    $.getJSON(<url>, function(result) {
        if(!result.finished) {
            setTimeout(check_condition, 2000);
        }
        // do something else
    } 
}
1 голос
/ 15 февраля 2011
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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...