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

В вызове AJAX 302 не соблюдается

Я использую jQuery 1.6.2, чтобы сделать запрос POST AJAX на страницу в том же домене. Эта страница перенаправляет 302 на другую страницу.

Теперь на моем локальном компьютере эта работа прекрасна, но на нашем производственном сервере перенаправление никогда не выполняется, и в инспекторе Chrome запрос считается "отмененным".

ezRtw.png

Если я перейду на ту же страницу без участия javascript, все будет хорошо, и, как я уже сказал, AJAX работает на моей локальной машине, но не на рабочем сервере.

Кто-нибудь знает, что может вызвать это?

Существуют некоторые различия между серверами (OS X, Apache2, PHP5.3.6, HTTP на локальном компьютере, Ubuntu, Lighttpd, PHP5.3.3, HTTPS при производстве), но ни один из них для меня не имеет значения.

4b9b3361

Ответ 1

Вызывается ошибка в коде перенаправления, при которой перенаправление переходит к http://, в то время как запрашиваемая страница была https://. Это заставляет браузер отказаться от перенаправления.

Ответ 2

function doAjaxCall() {
   $.ajaxSetup({complete: onRequestCompleted});
   $.get(yourUrl,yourData,yourCallback);
}

function onRequestCompleted(xhr,textStatus) {
   if (xhr.status == 302) {
      location.href = xhr.getResponseHeader("Location");
   }
}

следующие вопросы, связанные с вашим ответом. вы можете найти ответ ниже ссылок.

Поймать 302 НАЙДЕНО в JavaScript

Как управлять запросом на перенаправление после вызова jQuery Ajax

Ответ 3

На основе этого ответа: fooobar.com/questions/1299/... Я нашел следующий код очень полезным:

$('body').ajaxComplete(function (e, xhr, settings) {
    if (xhr.status == 200) {
        var redirect = null;
        try {
            redirect = $.parseJSON(xhr.responseText).redirect;
            if (redirect) {
                window.location.href = redirect;
            }
        } catch (e) {
            return;
        }
    }
});

Затем вы просто предоставляете JSON, например следующее:

{redirect: '/redirect/to/this/path'}

И ajaxComplete будет перенаправлять браузер.

Помните, что $.ajax('complete') запускает ПОСЛЕ $.ajax('success') или $.ajax('error')

Ответ 4

Я рассматриваю это как проблему на стороне сервера, а не клиентскую. Браузер не должен следовать перенаправлениям на http, когда он делает запрос ajax https, поскольку это будет недостатком безопасности.

Я понял, что использовал относительные пути, такие как HttpResponseRedirect('/path/to/'). На некотором уровне этот url был добавлен с префиксом http://, и это было то, что получил браузер: http://example.com/path/to/

Вы должны убедиться, что Location отправлен в заголовке ответа с полным путем, включая https://.