Ответ 1
Вызывается ошибка в коде перенаправления, при которой перенаправление переходит к http://, в то время как запрашиваемая страница была https://. Это заставляет браузер отказаться от перенаправления.
Я использую jQuery 1.6.2, чтобы сделать запрос POST AJAX на страницу в том же домене. Эта страница перенаправляет 302 на другую страницу.
Теперь на моем локальном компьютере эта работа прекрасна, но на нашем производственном сервере перенаправление никогда не выполняется, и в инспекторе Chrome запрос считается "отмененным".
Если я перейду на ту же страницу без участия javascript, все будет хорошо, и, как я уже сказал, AJAX работает на моей локальной машине, но не на рабочем сервере.
Кто-нибудь знает, что может вызвать это?
Существуют некоторые различия между серверами (OS X, Apache2, PHP5.3.6, HTTP на локальном компьютере, Ubuntu, Lighttpd, PHP5.3.3, HTTPS при производстве), но ни один из них для меня не имеет значения.
Вызывается ошибка в коде перенаправления, при которой перенаправление переходит к http://, в то время как запрашиваемая страница была https://. Это заставляет браузер отказаться от перенаправления.
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
На основе этого ответа: 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')
Я рассматриваю это как проблему на стороне сервера, а не клиентскую. Браузер не должен следовать перенаправлениям на http
, когда он делает запрос ajax https
, поскольку это будет недостатком безопасности.
Я понял, что использовал относительные пути, такие как HttpResponseRedirect('/path/to/')
. На некотором уровне этот url был добавлен с префиксом http://
, и это было то, что получил браузер: http://example.com/path/to/
Вы должны убедиться, что Location
отправлен в заголовке ответа с полным путем, включая https://
.