Постоянно извлекать результат с сервера через Ajax до истечения времени ожидания или получения результата - PullRequest
0 голосов
/ 25 июня 2010

Я хотел бы сделать Ajax-запрос к серверу, который отвечает за статус задания и результат.Если статус «Ошибка» или «ОК», клиент должен показать результат (содержащий HTML-код) пользователю.Однако, если статус «Ожидание», клиент должен подождать несколько секунд, а затем снова автоматически отправить тот же Ajax-запрос.Это должно продолжаться до тех пор, пока не истечет время ожидания или не появится сообщение «Ошибка» / «ОК».

Есть идеи для подобного фрагмента решения / кода?В настоящее время я использую Rails, JQuery и Prototype.Большое спасибо.

Гора

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

Вы можете сделать как

(function refresh(){
   $.ajax({
      url:      '/myfile',
      data:     'data',
      dataType: 'text',
      type:     'POST',
      success:   function(data){
          if(data === 'Waiting')
             setTimeout(refresh, 5000);
          else
             alert(data);
      }
   });
})();

Это может инициировать self-executing anonymous function с помощью запроса ajax. Если возвращаемая строка равна Waiting, она установит тайм-аут на 5 секунд и снова вызовет себя.

0 голосов
/ 26 июня 2010

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

Если, как кажется, вы ожидаете, возможно, долго выполняющихся заданий, лучше всего просто вернутьсясостояние HTTP в порядке и позволяет извлекать содержимое на более позднем этапе либо синхронно, либо асинхронно, в зависимости от ситуации.

Вы также можете рассмотреть возможность доставки ответа с использованием атрибутов заголовка HTTP, а не встроенных данных ответа.

0 голосов
/ 25 июня 2010

Javascript:

var t = setInterval('checkServer', 5000)

function checkServer() {

  $.ajax({
    url: 'yoururl',
    data: params,
    success: function(resp) {
      if(resp == "Error" || resp == "OK") {
        alert(resp);
        clearInterval(t);
      }
    }
  });
}
...