Подтвердить что ты не робот

Ajax: тайм-аут настройки всегда отменяет тайм-аут браузера?

Кажется, возможно установить значение тайм-аута при выполнении запроса Ajax в простом javascript. см. Как определить время ожидания вызова AJAX (XmlHttpRequest) в браузере?

Это также возможно при использовании jQuery ajax-реализации и других подобных фреймворках, которые я предполагаю. см. Установить время ожидания для ajax (jQuery)

У браузеров есть довольно неопределенная спецификация относительно их тайм-аута по умолчанию. см. Тайм-ауты браузера

Следовательно, можно "эй, я собираюсь установить тайм-аут для моего запроса ajax, чтобы все пользователи имели одинаковый тайм-аут".

Но затем, следующий вопрос: действительно ли это будет отменять тайм-аут браузера во всех случаях?

Когда я говорю "все" случаи, я имею в виду, например, если значение тайм-аута браузера меньше, чем значение таймаута запроса ajax.

Я подозреваю, что это не так.

И я также подозреваю, что лучше всего всегда иметь обработчик ошибок тайм-аута, чтобы убедиться, что что бы ни случилось, вы можете отобразить соответствующее сообщение, которое позволит сэкономить часы работы вашей команде поддержки и деньги в вашей компании. см. Определите, является ли ошибка $.ajax таймаутом

Заранее спасибо

4b9b3361

Ответ 1

Это интересный вопрос, я провел несколько экспериментов в Chrome 59.0 и Firefox 54.0, используя службу задержки 10 минут в качестве бэкэнда.

После некоторого теста, настроившего тайм-аут на клиенте на 10 минут, я получил ответ об ошибке с текстом "ошибка" через 300 секунд (5 минут) в обоих браузерах, поэтому по крайней мере для этих двух браузеров невозможно переопределить внутренний тайм-аут значение Я предполагаю такое же поведение для остальных браузеров на рынке.

Мой тестовый скрипт: (похожие результаты для ванильного JavaScript)

var st = new Date();  
  $.ajax({
      url: "https//mysitewith10minresponse.com/foobar",
      type: "GET",
      dataType: "json",
      timeout: 600000, 
      success: function(response) { console.log(response); },
      error: function(jqXHR, textStatus, errorThrown) {           
          st = (new Date() - st)/1000;
          alert("Text Status " + textStatus + ", diff: " + st + " seconds");          
      }
  });