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

Что произойдет, если во время вызова ajax отображается окно предупреждения?

Мне просто интересно, что может случиться, если во время выполнения ajax-вызова в окне браузера появится запрос пользователю.

Скажем, например, что у меня есть ajax-вызов

$.ajax({
    url: ...,
    type: GET/POST,
    ...
    success: function(data){
        console.log(data);
    },
    error: ...
});

что занимает много времени (10 секунд). Пока выполняется вызов, выдается простое предупреждение javascript.

alert("hello!");

Что происходит, например, если:

  • запускается вызов ajax
  • Получение данных ajax-вызовов
  • отображается предупреждение
  • ajax call возвращает данные (окно предупреждения все еще открыто!)

Зная, что JS является одиночным потоком, я знаю, что выполнение script будет остановлено, мне просто интересно, что произойдет с вызовом/ответом ajax, если окно предупреждения не закрыто "по времени".

Надеюсь, я был достаточно ясным и что это не вопрос "dummy". Спасибо вам

4b9b3361

Ответ 1

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

При закрытии предупреждения и при условии, что запрос AJAX завершен, пока предупреждение открыто, будет обработана функция success (или error).

Обратите внимание, что запрос AJAX будет продолжать выполняться во время показа предупреждения (поэтому длительный AJAX может обрабатывать, пока предупреждение открыто), но это просто, что ваш script не может продолжить обработку запроса до тех пор, пока не появится предупреждение замкнутый.

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

Еще один момент, который следует учитывать, заключается в том, что после закрытия предупреждения script будет продолжать работу с остальной частью функции (код сразу после alert) до того, как будет обработан ответ AJAX. Это помогает продемонстрировать, что я имею в виду

Ответ 2

HTTP-запрос будет продолжать выполняться и обрабатываться в фоновом режиме.

Когда цикл событий JS становится свободным, обработчик readystatechange срабатывает.

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