ivanchurkin
@ivanchurkin
Зануда

Как выполнить функцию после ajax-запроса типа post?

Выполняется авторизация.

$(document.forms['someName']).on('submit', function() {
    
    var form = $(this);
    $(':submit', form).button('loading');

    $.ajax({
        url: '/signin',
        method: 'POST',
        data: form.serialize(),
        complete: function() {
            $(':submit', form).button('reset');
        },
        statusCode: {
            200: function() {
                    window.location.href = '/';
            },
            403: function(jqXHR) {
                var error = JSON.parse(jqXHR.responseText);
                window.location.href = '/signin';
            }
        }
    });
    return false;
});

После ответа сервера ошибкой 403 хочу перенаправить на страницу авторизации window.location.href = '/signin' и вывести информационное сообщение с указанием причины ошибки. При этом не хочется указывать каких-либо параметров через ?, вроде этого window.location.href = '/signin?login_fail=1'.

Таким образом есть ли возможность вызвать js-функцию только в том случае, если на эту страницу пользователь пришёл после неудачного post-запроса?
  • Вопрос задан
  • 2647 просмотров
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
UPD: поможет флаг в cookie или localstorage, например: localStorage.lastResult = "error";

Рядом с complete в вызове $.ajax добавьте еще error: function() {} или error: functionName если она уже где-то была определена.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexanderTsymbal
@AlexanderTsymbal
tsymbal.su
у метода jquery $.ajax есть такой параметр как success (оформляется аналогично complete и statusCode) - он срабатывает при успешном срабатывании метода: т.е. если запрос выполнен и возвращена какая-то информация.

Вы можете использовать success для обработки полученных данных. Вижу, что вы получаете ответ в JSON. Засуньте в него какой-нибудь флаг, например "is403" со значениями true или false. И устанавливайте флаг только в том случае, если 403 сработал.
тогда кусок скрипта будет следующим:
....
success: function(data) {
   var answer = JSON.parse(data);
   if (answer.is403 === true) {
      //делаем редирект
   } else {
      //делаем что-нибудь другое, если флаг 403 не установлен, а значит, возвращены какие-то данные
   }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы