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


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

4 58

4 ответа:

Если вы используете jQuery с $.AJAX-вызова вы можете установить свойство timeout, чтобы контролировать количество времени, прежде чем запрос возвращает в состояние ожидания. Тайм-аут устанавливается в миллисекундах, поэтому просто установите его на очень высокое значение. Вы также можете установить его в 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:

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

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

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

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

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

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

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