Así que tengo esta llamada jQuery AJAX, y la respuesta proviene del servidor en forma de una redirección 302. Me gustaría tomar este redireccionamiento y cargarlo en un iframe, pero cuando intento ver la información del encabezado con una alerta de JavaScript, aparece nulo, aunque firebug lo ve correctamente.
Aquí está el código, si te ayudará:
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
Realmente no tengo acceso a las cosas del lado del servidor para mover la URL al cuerpo de respuesta, lo cual sé que sería la solución más fácil, por lo que cualquier ayuda con el análisis del encabezado sería fantástica.
post
el servidor original y extraerá los datos de destino y JS front-end solicitará este servidor proxy para los datos de destino. O 2) cambie el código del servidor para permitir CORS.Respuestas:
La solución de cballou funcionará si está utilizando una versión anterior de jquery. En versiones más recientes también puedes probar:
Según los documentos, el objeto XMLHttpRequest está disponible a partir de jQuery 1.4.
fuente
Si se trata de una solicitud CORS , es posible que vea todos los encabezados en las herramientas de depuración (como Chrome-> Inspect Element-> Network), pero el objeto xHR solo recuperará el encabezado (via
xhr.getResponseHeader('Header')
) si dicho encabezado es un encabezado de respuesta simple :Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
Si no está en este conjunto, debe estar presente en el encabezado Access-Control-Expose-Headers devuelto por el servidor.
Sobre el caso en cuestión, si se trata de una solicitud CORS, uno solo podrá recuperar el
Location
encabezado a través delXMLHttpRequest
objeto si, y solo si, el encabezado a continuación también está presente:Si no es una solicitud CORS,
XMLHttpRequest
no tendrá problemas para recuperarla.fuente
fuente
La desafortunada verdad sobre AJAX y la redirección 302 es que no puede obtener los encabezados del retorno porque el navegador nunca los entrega al XHR. Cuando un navegador ve un 302, aplica automáticamente la redirección. En este caso, vería el encabezado en firebug porque el navegador lo obtuvo, pero no lo vería en ajax, porque el navegador no lo pasó. Esta es la razón por la cual nunca se llama al controlador de éxito y error. Solo se llama al controlador completo.
http://www.checkupdown.com/status/E302.html
Aquí hay algunas publicaciones de stackoverflow sobre el tema. Algunas de las publicaciones describen hacks para solucionar este problema.
Cómo administrar una solicitud de redireccionamiento después de una llamada jQuery Ajax
Cogiendo 302 ENCONTRADO en JavaScript
Redirección HTTP: 301 (permanente) frente a 302 (temporal)
fuente
El objeto XMLHttpRequest subyacente utilizado por jQuery siempre seguirá silenciosamente las redirecciones en lugar de devolver un código de estado 302. Por lo tanto, no puede utilizar la funcionalidad de solicitud AJAX de jQuery para obtener la URL devuelta. En su lugar, debe poner todos los datos en un formulario y enviar el formulario con el
target
atributo establecido al valor delname
atributo del iframe:La
url.do
página del servidor se cargará en el iframe, pero cuando llegue su estado 302, el iframe se redirigirá al destino final.fuente
prueba esto:
fuente
ACTUALIZACIÓN 2018 PARA JQUERY 3 Y MÁS TARDE
Sé que esta es una vieja pregunta, pero ninguna de las soluciones anteriores funcionó para mí. Aquí está la solución que funcionó:
fuente
+1 a PleaseStand y aquí está mi otro truco:
Después de buscar y encontrar que la "solicitud de cross ajax" no podía obtener encabezados de respuesta del objeto XHR, me di por vencido. y use iframe en su lugar.
fuente