Ловля 302 найденных в JavaScript

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

6 ответов


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

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

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


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

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

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


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

Я был с помощью localhost / Главная / тест addres для тестирования страницы. Но ajax запрашивает код с помощью 127.0.0.1 / Home / 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 атрибута, эта ошибка не ocurre