jQuery.get помещает запрос в очередь, пока не доступно сетевое соединение - PullRequest
1 голос
/ 01 сентября 2011

Я использую jQuery Mobile для создания веб-приложения для просмотра и обновления системы типов CRM.

Мобильное приложение отправляет обновления, используя jQuery.get и jQuery.post, и они отлично работают, когда доступно сетевое соединение.

Как мне кодировать или что можно использовать для постановки в очередь вызовов jQuery.get и jQuery.post, когда сетевое соединение недоступно, поэтому они отправляются, когда оно снова становится доступным.

1 Ответ

1 голос
/ 01 сентября 2011

Редактировать: ау, я только что заметил, что вы сказали «jQuery Mobile», я сначала прочитал это как jquery для мобильных телефонов.Хммм, это, вероятно, будет работать только до тех пор, пока jQM поддерживает ajax так же, как обычный jquery

У меня была идея с дополнительным запросом ajax, но вам это не нужно.Просто настройте свой AJAX вот так и дайте ему время ожидания.Если для ответа сервера требуется> 4 (должно быть достаточно для широкополосного соединения, но некоторым телефонам может потребоваться ~ 10-15) секунд, он просто попытается снова выполнить запрос ajax до retryLimit, который можно установить, затемизменился позже также после 50 раз (т.е. должен ли он отправляться, когда программа бездействует и, возможно, не имеет данных?).Когда он подключится, он перейдет к функции успеха, которая затем отправит данные на сервер.

Таким образом, это будет выглядеть так:

  $.ajax({
    type: 'GET',
    timeout: 4000,
    tryCount : 0,
    retryLimit: 50,
    success:function(data) {
            sendSavedData();
    }
    error: function(xhr, textStatus, errorThrown) {
      if(textStatus == 'timeout') {
          this.tryCount++;
          if(this.tryCount <= this.retryLimit) {
            $.ajax(this);
            return;
          }
          var check = confirm('We have tried ' + this.retryLimit + ' times to do this and the server has not responded. Do you want to try again?');
          if(check) {
            this.timeout = 200000;
            $.ajax(this);
            return;
          } else {
            return;
          }
      }
    }
  });
...