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

Длина времени ожидания AJAX (XmlHttpRequest) браузером

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

4b9b3361

Ответ 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.