Захват 302 НАЙДЕНО в JavaScript

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Я использовал localhost/Home/Test addres для тестирования страницы. Но код запроса ajax использует 127.0.0.1/Home/AjaxRequest для параметра url. Когда URL-адреса разные, эта ошибка возникает.

возможно, это помогает кому-то:)

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

установить переменную с атрибутом любого примера объекта

<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-адрес атрибута, эта ошибка не ocurre