Ajax: тайм-аут настройки всегда отменяет тайм-аут браузера?
Кажется, возможно установить значение тайм-аута при выполнении запроса Ajax в простом javascript. см. Как определить время ожидания вызова AJAX (XmlHttpRequest) в браузере?
Это также возможно при использовании jQuery ajax-реализации и других подобных фреймворках, которые я предполагаю. см. Установить время ожидания для ajax (jQuery)
У браузеров есть довольно неопределенная спецификация относительно их тайм-аута по умолчанию. см. Тайм-ауты браузера
Следовательно, можно "эй, я собираюсь установить тайм-аут для моего запроса ajax, чтобы все пользователи имели одинаковый тайм-аут".
Но затем, следующий вопрос: действительно ли это будет отменять тайм-аут браузера во всех случаях?
Когда я говорю "все" случаи, я имею в виду, например, если значение тайм-аута браузера меньше, чем значение таймаута запроса ajax.
Я подозреваю, что это не так.
И я также подозреваю, что лучше всего всегда иметь обработчик ошибок тайм-аута, чтобы убедиться, что что бы ни случилось, вы можете отобразить соответствующее сообщение, которое позволит сэкономить часы работы вашей команде поддержки и деньги в вашей компании. см. Определите, является ли ошибка $.ajax таймаутом
Заранее спасибо
Ответы
Ответ 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");
}
});