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

Как долго браузер будет ждать после запроса ajax?

Сколько времени может ждать браузер до появления ошибки, прежде чем сервер ответит на запрос? Может ли это время быть неограниченным?

4b9b3361

Ответ 1

Если вы используете вызов jQuery $.ajax, вы можете установить свойство тайм-аута для управления количеством времени до возврата запроса с условием таймаута. Тайм-аут устанавливается в миллисекундах, поэтому просто установите его на очень высокое значение. Вы также можете установить значение 0 для "неограниченного", но, на мой взгляд, вы должны просто установить высокое значение вместо этого.

Примечание: неограниченное фактически значение по умолчанию, но большинство браузеров имеют по умолчанию таймауты, которые будут удалены.

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

Итак, если вы хотите установить тайм-аут в 3 секунды и обрабатывать таймаут, вот пример:

$.ajax({
    url: "/your_ajax_method/",
    type: "GET",
    dataType: "json",
    timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited
    success: function(response) { alert(response); },
    error: function(jqXHR, textStatus, errorThrown) {
        if(textStatus==="timeout") {  
            alert("Call has timed out"); //Handle the timeout
        } else {
            alert("Another error was returned"); //Handle other error type
        }
    }
});​

Ответ 2

Да и нет. Да, сервер может это сделать или настроен для этого, браузеры (я не знаю о спецификациях версии/дистрибутора) могут включать таймауты.

Есть два решения, хотя для достижения/эмуляции этого по HTTP:

  • Если это просто длинный script, и вы ждете результатов, это не путь, вы должны сделать это как предыдущий плакат и использовать асинхронную обработку с опросом сервера для результатов, это будет гораздо более надежное огневое решение. Например: миниатюра script со стороны сервера процессора изображений: пользователь загружает изображение, которое сервер имитирует 200 и "Идентификатор задания". Клиент (javascript ^^) может затем использовать JobID для запроса статуса задания/результата.
  • Если ваша цель состоит в том, чтобы иметь что-то похожее на соединение в реальном времени между браузером и сервером (одностороннее соединение, как только запрос сделан браузером, никакая дополнительная информация не может быть отправлена ​​без использования новых запросов (ajax ^^)), это называемый длинным опросом/обратным ajax и может использоваться для связи в реальном времени через http. Существует несколько методов, использующих два длинных опросных запроса параллельно, чтобы один из них перешел в режим ожидания второго, и первый пытается повторно подключиться.

Ответ 3

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

Сколько времени будет ждать браузер, зависит от ряда факторов, например. где происходит таймаут - это на уровне TCP, сервере или локальном браузере?

Если у вас есть длительный процесс на сервере, и вы хотите обновить веб-страницу, то типичным способом его обработки является асинхронное выполнение длительного процесса и уведомление клиента, когда оно завершено, например. имеют вызов ajax, который опросит сервер или использует HTTP 1.1 и обслуживает клиентский поток уведомлений.

В любом случае все еще возможно закрыть соединение, чтобы клиент все еще нуждался в возможности повторно открыть его.

Ответ 4

Я обнаружил, что в случае обычной (HTML-страницы) браузеры запускаются до таймаута после cca. 30 сек. Это важно, потому что за ним следуют другие участники: прокси, маршрутизаторы (в ролевой игре играют в эту игру? Я не уверен). Я использую длительную задержку на стороне сервера 4 с (если на клиент не посылать ничего), а мой клиент AJAX выполняет другой HTTP-запрос сразу (я нахожусь в локальной сети, там нет интернет-лаг). 4 сек достаточно долго, чтобы не перегружать сервер и сеть с часто посещаемыми опросами, и достаточно коротка для случая, когда какой-то один опрос выпадает из строки, которую клиент не может обнаружить и обработать.

Кроме того, есть и другие проблемы с кометами (длительный HTTP-запрос): ограничение браузера на количество одновременных HTTP-запросов, обработка событий на стороне клиента (необходимо немедленно отправить на сервер), обнаружение и восстановление сервера/сети, многопользовательская обработка и т.д.