Остановите вызов AJAX XHR, но продолжайте работу с PHP - PullRequest
0 голосов
/ 17 января 2019

Добрый день,

У меня есть следующие функции, которые отображают и скрывают загрузчик страницы:

busyStatusDelay = 1000; //milliseconds
var timer = null;
var show = false;

function busyShow(nodelay,delay) {
    timer = setTimeout('busyDelayShow()',busyStatusDelay);
}

function busyDelayShow() {
    if ($.active > 0) {
        $('#json-overlay').css('display', 'table');
        show = true;
    }
}

function busyHide() {
    clearTimeout(timer);
    timer = null;
    show = false;
    $('#json-overlay').css('display', 'none');
}

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

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

Я попытался использовать следующее, чтобы JS не видел его в качестве активного запроса:

xhr.abort(); busyHide();

но когда ajax прерывается, php прерывается с ним.

Обратите внимание, что функции для отправки электронных писем должны работать в фоновом режиме и не должны ждать ответа.

Я искал способ отключиться от запроса к серверу, не влияя на работающие функции сервера и отправить электронное письмо.

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

Заранее спасибо за любые советы о том, как продолжить!

1 Ответ

0 голосов
/ 17 января 2019

Хорошим подходом к этому было бы выполнение SMTP в качестве фонового процесса с использованием какого-либо механизма организации очередей. Таким образом, в основном, всякий раз, когда JS запускает AJAX для отправки по почте, PHP помещает запрос электронной почты в очередь и немедленно отправляет ответ обратно в XHR. Таким образом, ваше выполнение AJAX не будет заблокировано надолго. Если вы используете некий PHP-фреймворк, такой как Laravel, вам будет проще управлять очередями, в противном случае посмотрите на этот пост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...