Время ожидания AJAX (XmlHttpRequest) в браузере - PullRequest
14 голосов
/ 29 февраля 2012

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

Ответы [ 4 ]

21 голосов
/ 29 февраля 2012

В соответствии со спецификацией значение тайм-аута по умолчанию равно нулю, что означает, что тайм-аут не установлен. Однако вы можете установить значение тайм-аута в свойстве 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

4 голосов
/ 29 февраля 2012

Я не думаю, что браузеры имеют тайм-аут для 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 голосов
/ 08 сентября 2017

Я сделал скромное количество испытаний. Чтобы проверить, я загрузил свой веб-сайт, остановил локальный сервер и затем попытался выполнить запрос AJAX. Я установил timeout на что-то низкое, например 1000 мс, пока не смогу убедиться, что у меня минимальный код (вы должны поставить xhr.timeout после open и до send).

Как только я заработал, моей первоначальной целью было определить подходящее количество времени, чтобы позволить, однако я был удивлен, насколько быстро браузер игнорирует timeout. Моя цель изменилась, чтобы попытаться определить, какой максимальный тайм-аут может быть до того, как обработка ошибок перестанет быть жизнеспособной. Это означает, что через эти довольно короткие промежутки времени ваш скрипт обработчика тайм-аута не будет работать вообще . То, что я нашел, было довольно жалким.

  • Chrome 60: 995 мс, 996 мс выбросит грязную злую ошибку в консоль.
  • 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 установлен выше, чем 995 мс Chrome проигнорирует ваш код и рвет на вашей чистой чистой пустой консоли, которую вы усердно работали, чтобы поддерживать чистоту. Firefox не намного лучше, и есть ненадежные запросы, которые просто превышают время ожидания, превышающее мое терпение, и при этом игнорируют обработчик ontimeout.

1 голос
/ 16 июля 2015

Браузер имеет значение тайм-аута, поведение зависит от того, что браузер chrome имеет значение тайм-аута 5 минут, а через 5 минут он повторно отправляет вызов ajax

...