2015-02-07 2 views
1

У меня есть простой запрос ajax, чтобы загрузить больше сообщений. Я думаю об использовании блокировок, когда вызывается один запрос «загрузить больше» ajax, чтобы предотвратить одновременное «нагрузка больше». План заключается в блокировке метода запроса ajax при его вызове и освобождении блокировки при возврате с помощью методов request.done или request.fail. Есть ли случай, когда jQuery ajax-запрос не вызывает ни один из этих методов (например, кратковременная потеря подключения к Интернету)?Выполняет ли запрос jQuery ajax всегда вызовы или методы отказа?

ответ

1

Под всеми обертками аякс jQuery является просто XMLHttpRequest. XMLHttpRequest может находиться в одном из следующих состояний:

  • UNSENT (числовое значение 0): Объект был построен.

  • OPENED (числовое значение 1): метод open() успешно активирован и запрос может быть выполнен с использованием метода send().

  • HEADERS_RECEIVED (числовое значение 2): все переадресации (если есть) были выполнены, и все HTTP-заголовки окончательного ответа были получены. Теперь доступно несколько элементов ответа объекта.

  • LOADING (числовое значение 3): принимается тело объекта ответа.

  • DONE (числовое значение 4): передача данных завершена или что-то пошло не так во время передачи (например, бесконечные переадресации).

По существу, вы спрашиваете, если есть случай, когда DONE никогда не достигается после того, как запрос OPENED.

Если есть бесконечные переадресации, мы перейдем от HEADERS_RECEIVED к DONE (с состоянием неисправности) и запрос будет выполнен.
Если переадресация будет успешной, мы продолжим до LOADING, которая будет продолжена до DONE, если данные были получены успешно.

Однако, если данные не получены, и мы остаемся ждать? XMLHttpRequest имеет свойство timeout, которое указывает после того, сколько миллисекунд провалит запрос по мере его истечения. Однако, согласно this question, jQuery не дает значения по умолчанию, отличные от него (я не проверял его сам, ответ может быть устаревшим, вам придется ссылаться на последний источник). Некоторые браузеры имеют встроенные значения по умолчанию для тайм-аутов, но они варьируются от поставщика к поставщику.

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

Смежные вопросы