Получение фактического URL после POST, который перенаправляется с помощью jquery .ajax () - PullRequest
13 голосов
/ 26 мая 2011

Я следую шаблону PRG (Post-Redirect-Get) в своем веб-приложении и использую что-то вроде следующего для выполнения большинства моих POST:

$.ajax({
    type: 'POST',
    url: 'A.html',
    data: '....',
    statusCode: {
        302: function() {
            alert("302"); // this is never called
        },
        200: function() {
            alert("200");
        },
    },
    success: function (data, textstatus) {
        alert('You are now at URL: ' + ??);
    },
    error: function (data) {
    },
    complete: function (jqXHR, textstatus) {
        alert('You are now at URL: ' + ??);
    },
});

Мне нужно получить URL-адрес ПОСЛЕ любого перенаправления, то есть URL-адреса последнего запроса GET, вызванного функцией .ajax (). Например, с POST на A.html можно перенаправить на B.html или C.html (всегда через 302). Как мне получить окончательный URL?

Я использую jquery 1.5.1, а прокси-сервер засвидетельствовал, что jquery молча следит за перенаправлениями - что меня устраивает. Меня не волнует ни один из URL-адресов, ответивших 302 - я просто хотел бы знать URL-адрес окончательного запроса в тот момент, когда запускаются хуки.

Ответы [ 3 ]

10 голосов
/ 01 июня 2011

Я наконец решил эту проблему, добавив дополнительный заголовок во все мои ответы (например, "X-MYAPP-PATH: /Admin/Index").

Таким образом, мой javascript может быть изменен на:

success: function (data, textstatus, xhrreq) {
    alert('You are now at URL: ' + xhrreq.getResponseHeader("X-MYAPP-PATH"));
},

Однако я все еще считаю, что jquery может дать мне текущий URL, поэтому я считаю это взломом.

3 голосов
/ 25 января 2018

Лучшее решение - снабдить jQuery ajax пользовательским xhr-объектом, например так:

var xhr = new XMLHttpRequest();

$.ajax({
    url: '/url',
    type: 'post',
    data: '...',
    xhr: function() {
         return xhr;
    }
});

Затем вы можете получить доступ к текущему URL в любом обратном вызове

success: function () {
    alert('You are now at URL: ' + xhr.responseURL);
}
0 голосов
/ 26 мая 2011

Сначала попытайтесь выяснить код состояния, который возвращается перенаправлением (обычно> 300).

success: function (data, textstatus, xhrReq) {
        //if the status is greater than 300 
        if(xhrReq.status > 300) {
           alert('You are now at URL: ' + xhrRequest.getHeader("Location"));
        }
    },

Еще один момент, который следует отметить, что порядок выполнения: успех \ ошибка -> функция statusCode -> Complete

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