Вопрос

Я использую jQuery для отправки запроса AJAX POST на мой сервер, который может возвращать HTTP-ответ со статусом 302.Затем JavaScript просто отправляет GET-запрос на этот URL, в то время как я хотел бы перенаправить пользователя на URL в этом ответе.Возможно ли это?

Это было полезно?

Решение

Принятый ответ не работает по указанным причинам.Я опубликовал комментарий со ссылкой на вопрос, в котором описывался взлом, позволяющий обойти проблему прозрачной обработки 302 браузером:

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

Тем не менее, это немного грязный взлом, и после долгих поисков я нашел то, что, на мой взгляд, является лучшим решением - использовать JSON.В этом случае вы можете сделать так, чтобы все ответы на запросы ajax содержали код 200, и в теле ответа вы добавляете какой-то объект JSON, который ваш обработчик ответов ajax затем может использовать соответствующим образом.

Другие советы

Я так не думаю.В W3C говорит, что HTTP-перенаправления с определенными кодами состояния, включая 302, должны выполняться прозрачно.Цитируется ниже:

Если ответ представляет собой HTTP-перенаправление (код состояния 301, 302, 303 или 307), то его выполнение ДОЛЖНО быть прозрачным (если это не нарушает меры безопасности или меры предосторожности в отношении бесконечного цикла).Любая другая ошибка (включая 401) ДОЛЖНА приводить к тому, что объект использует эту страницу с ошибкой в качестве ответа.

В качестве эксперимента я попытался выполнять Ajax-запросы из различных браузеров (Firefox 3.5, Chrome, IE8, IE7, IE6) к серверу, предоставляющему код состояния 302 и отображающему статус в объекте запроса браузера.В каждом случае оно отображалось как 200.

В моей проблеме причиной было:

я использовал локальный хостинг / Главная страница / Тест адреса для тестирования страницы.Но код запроса ajax с использованием 127.0.0.1/Главная страница/ajaxRequest для параметра url.Когда URL-адреса отличаются, возникает эта ошибка.

может быть, это кому-то поможет :)

Вместо того, чтобы запрашивать код Javascript для обработки 302, было бы лучше вернуть 500 с пользовательским кодом ошибки + сообщение о событии 302

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

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

Лучшим решением является:

задайте переменную с атрибутом любого объекта пример

<html>
·
·
     <span url="http://www.google.com"></span>
·
·
</html>

$('.example').on('click', function(){
     $url = $(this).attr('url');

     $.get($url, function(data){ alert(data); })
})

Если URL задан непосредственно в js, вы должны найти ошибку 302, я не знаю, из-за чего возникает эта ошибка, но если вы получаете URL атрибута, эта ошибка не встречается

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top