statuscode - Catching 302 ENCONTRADO en JavaScript
redirect with jquery ajax (6)
Uso jQuery para hacer una solicitud AJAX POST a mi servidor, que puede devolver una respuesta HTTP con el estado 302. Luego, JavaScript simplemente envía la solicitud GET a esta URL, mientras que me gustaría redirigir al usuario a la URL en esta respuesta. es posible?
En lugar de solicitar el código de Javascript para Handle 302, sería mejor devolver 500 con código de error personalizado + mensaje en caso de 302
En mi problema, la razón fue:
Estaba usando localhost / Home / Test addres para probar la página. Pero el código de solicitud ajax usa 127.0.0.1/Home/AjaxRequest para el parámetro url. Cuando las URL son diferentes, se produce este error.
tal vez ayuda a alguien :)
La mejor solución es:
establecer la variable con un atributo de cualquier objeto ejemplo
<html>
·
·
<span url="http://www.google.com"></span>
·
·
</html>
$(''.example'').on(''click'', function(){
$url = $(this).attr(''url'');
$.get($url, function(data){ alert(data); })
})
Si la url se indica directamente en js, deberías encontrar un error 302, no sé porque la razón ocurre este error, pero si obtienes la url de un atributo, este error no ocurre
La respuesta aceptada no funciona por las razones dadas. Publiqué un comentario con un enlace a una pregunta que describía un truco para resolver el problema del 302 que manejaba de forma transparente el navegador:
Cómo administrar una solicitud de redireccionamiento después de una llamada jQuery Ajax
Sin embargo, es un poco sucio y después de buscarlo encontré lo que creo que es una mejor solución: use JSON . En este caso, puede hacer que todas las respuestas a las solicitudes ajax tengan el código 200 y, en el cuerpo de la respuesta, agregue algún tipo de objeto JSON que su controlador de respuesta ajax pueda usar de la manera adecuada.
No lo creo. El W3C dice que los redireccionamientos HTTP con ciertos códigos de estado, incluido 302, se deben seguir de manera transparente. Citado a continuación:
Si la respuesta es una redirección HTTP (código de estado 301, 302, 303 o 307), entonces DEBE respetarse de forma transparente (a menos que viole las precauciones de seguridad o de bucle infinito). Cualquier otro error (incluido un 401) DEBE hacer que el objeto use esa página de error como respuesta.
Como experimento, intenté hacer las solicitudes Ajax de varios navegadores (Firefox 3.5, Chrome, IE8, IE7, IE6) a un servidor que proporcionaba un código de estado 302 y mostraba el estado en el objeto de solicitud del navegador. En todos los casos, apareció como 200.
function doAjaxCall() {
$.ajaxSetup({complete: onRequestCompleted});
$.get(yourUrl,yourData,yourCallback);
}
function onRequestCompleted(xhr,textStatus) {
if (xhr.status == 302) {
location.href = xhr.getResponseHeader("Location");
}
}