Ajax-вызов ведет себя по-разному в зависимости от браузера - PullRequest
0 голосов
/ 11 октября 2018

У меня есть следующая функция, которая выполняется, когда пользователь выходит из системы.Он содержит вызов ajax с функциями успеха и неудач внутри.Мой сайт использует виджет чата от zendesk, который предоставляет API для выполнения различных действий в окне чата.При успешном выходе из системы я выполняю функцию endChat(), чтобы завершить текущий чат.В Chrome это прекрасно работает, и я могу отлаживать с помощью инструментов разработчика и наблюдать, как указатель выполнения нажимает $zopim.livechat.endChat(); Однако и в FireFox, и в IE пользователь выходит из системы еще до того, как эта строка попадет.Есть ли расхождения между тем, как эти браузеры обрабатывают вызовы ajax?

function logout(supressConfirmation, reason) {
    var url = $("#LogoutStatus").data('url');
    $.ajax({
        url: url,
        type: "Get",
        data: {},
        success: function (data) {
            if (data.isUpdating && supressConfirmation != true) {
                $("#logout-modal").modal('show');
            }
            else {
                window.location.href = '@Html.Raw(Url.Action("Logout","Logout"))' + '?reason=' + reason;
            }
            zE(function () {
                $zopim(function () {
                    $zopim.livechat.endChat();
                });
            });
        },
        error: function (failure) {
        }

    });
}

1 Ответ

0 голосов
/ 11 октября 2018

Используйте async:false, чтобы он ожидал возврата вызова Ajax и только затем перемещался на следующую строку, которая выводит вас из системы.

Итак, ваша измененная версия:

    url: url,
    type: "Get",
    data: {},
    async:false,
    success: ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...