В вызове AJAX 302 не сопровождается - PullRequest
21 голосов
/ 05 августа 2011

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

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

image

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

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

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

Ответы [ 4 ]

13 голосов
/ 06 августа 2011

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

6 голосов
/ 05 августа 2011
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 голосов
/ 15 августа 2014

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

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

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

2 голосов
/ 29 января 2013

Основываясь на этом ответе: https://stackoverflow.com/a/8752354/698289 Я нашел следующий код очень полезным:

$('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')

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