En el siguiente código, todo lo que intento hacer es obtener el código de respuesta HTTP de una llamada jQuery.ajax. Luego, si el código es 301 (movido permanentemente), muestre el encabezado de respuesta 'Ubicación':
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>jQuery 301 Trial</title>
<script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script type="text/javascript">
function get_resp_status(url) {
$.ajax({
url: url,
complete: function (jqxhr, txt_status) {
console.log ("Complete: [ " + txt_status + " ] " + jqxhr);
// if (response code is 301) {
console.log ("Location: " + jqxhr.getResponseHeader("Location"));
// }
}
});
}
</script>
<script type="text/javascript">
$(document).ready(function(){
$('a').mouseenter(
function () {
get_resp_status(this.href);
},
function () {
}
);
});
</script>
</head>
<body>
<a href="http://ow.ly/4etPl">Test 301 redirect</a>
<a href="http://cnn.com/not_found">Test 404 not found</a>
</body>
</html>
¿Alguien puede señalar dónde me estoy equivocando? Cuando verifico el objeto 'jqxhr' en Firebug, no puedo encontrar el código de estado ni el encabezado de respuesta 'Ubicación'. Establecí el punto de interrupción en la última línea de 'completar'.
Muchas gracias.
ajax
jquery-1.5
Mahesh
fuente
fuente
Respuestas:
Veo el campo de estado en el objeto jqXhr, aquí hay un violín que funciona:
http://jsfiddle.net/magicaj/55HQq/3/
fuente
Encontré este viejo hilo buscando una solución similar yo mismo y encontré que la respuesta aceptada estaba usando el
.complete()
método dejquery ajax
. Cito el aviso en el sitio web de jquery aquí:Para conocer la
status code
respuesta de ajax, se puede usar el siguiente código:Funciona de manera similar para
.done()
y.fail()
fuente
Probablemente sea más idiomático jQuery usar la propiedad statusCode del objeto de parámetro pasado a la función $ .ajax:
Sin embargo, como dijo Livingston Samuel , no es posible detectar códigos de estado 301 en javascript.
fuente
Cuando su solicitud XHR devuelve una respuesta de redireccionamiento (estado HTTP 301, 302, 303, 307),
XMLHttpRequest
sigue automáticamente la URL redirigida y devuelve el código de estado de esa URL .Puede obtener los códigos de estado sin redireccionamiento (200, 400, 500, etc.) a través de la
status
propiedad del objeto xhr.Así no se puede obtener la ubicación redirigida desde la cabecera de la respuesta de un
301
,302
,303
o307
petición.Es posible que tenga que cambiar la lógica de su servidor para responder de una manera que pueda manejar la redirección, en lugar de dejar que el navegador lo haga. Un ejemplo de implementación .
fuente
Puede verificar el contenido de su respuesta, solo console.log y verá que la propiedad tiene un código de estado. Si no entiende jsons, consulte el video: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts
Explica conocimientos muy básicos que te permiten sentirte más cómodo con javascript.
Puede hacerlo con una versión más corta de la solicitud ajax, consulte el código anterior:
Ejemplo de salida de consola:
fuente
jqxhr es un objeto json:
ver: jQuery ajax
entonces harías:
jqxhr.status
para obtener el estadofuente
NB: Usando jQuery 3.4.1
fuente