Я прочесываю сеть, пытаясь найти прямой ответ на этот вопрос. Кто-нибудь знает длину таймаута по умолчанию для запроса ajax браузером? Также по версии, если она изменилась?
Длина времени ожидания AJAX (XmlHttpRequest) браузером
Ответ 1
Я не думаю, что браузеры имеют тайм-аут для AJAX, есть только синхронные или асинхронные запросы; синхронно - сначала замораживает выполнение JavaScript до тех пор, пока запрос не вернется, асинхронный - не блокирует выполнение JavaScript, он просто выводит запрос из потока выполнения, и если у вас есть функция обратного вызова, он будет выполнять эту функцию параллельно с запущенными сценариями (аналогично потоку)
**sync flow:**
running JS script
|
ajax
(wait for response)
|
execute callback
|
running JS script
**async flow:**
running JS script
|
ajax --------------------
| |
running JS script execute callback
Ответ 2
Согласно спецификациям, значение тайм-аута по умолчанию равно нулю, что означает отсутствие таймаута. Однако вы можете установить значение тайм-аута в свойстве XHR.timeout; значение равно миллисекундам.
Источники:
http://www.w3.org/TR/2011/WD-XMLHttpRequest2-20110816/#the-timeout-attribute http://msdn.microsoft.com/en-us/library/cc304105 (v = vs .85).aspx
Ответ 3
У браузера есть значение тайм-аута, поведение зависит от того, как браузер Chrome имеет значение тайм-аута 5 минут, и через 5 минут он повторно отправит ajax-вызов
Ответ 4
Я провел небольшое тестирование. Чтобы проверить, загрузил ли я свой сайт, остановил локальный сервер, а затем попытался выполнить запрос AJAX. Я установил timeout
на что-то низкое, как 1000 мс, пока не смог убедиться, что у меня минимальный код (вы должны положить xhr.timeout
после open
и до send
).
Как только я получил его работу, моя первоначальная цель состояла в том, чтобы определить подходящее количество времени, чтобы позволить, однако, я был удивлен, как быстро timeout
будет игнорироваться браузерами. Моя цель изменилась, пытаясь определить, какой максимальный тайм-аут мог быть до того, как обработка ошибок перестала быть жизнеспособной. Это означает, что в течение этих довольно коротких промежутков времени ваш обработчик времени ожидания script вообще не работает. То, что я нашел, было довольно жалким.
- Chrome 60: 995ms, 996ms вызовет грязную ошибку в консоли.
- Firefox 52 ESR: ~ 3000 мс, положение мыши или другая проблема может не вызвать ответ или чуть меньше трех секунд.
Итак...
xhr.open(method,url,true);
xhr.timeout = 995;//REALLY short
xhr.send(null);
xhr.ontimeout = function ()
{
//Code will only execute if at or below *effective* timeouts list above.
//Good spot to make a second attempt.
}
Итак, если ваш timeout
устанавливается выше, чем 995ms Chrome будет игнорировать ваш код и блевать на вашей красивой чистой пустой консоли, что вы работали трудно держать в чистоте. Firefox не намного лучше, и есть ненадежные запросы, которые просто тайм-аут значительно превосходят любое мое терпение и при этом игнорируют обработчик ontimeout
.