No código a seguir, tudo o que estou tentando fazer é obter o código de resposta HTTP de uma chamada jQuery.ajax. Em seguida, se o código for 301 (Movido permanentemente), exiba o cabeçalho de resposta 'Local':
<?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>
Alguém pode apontar para onde estou errado? Quando verifico o objeto 'jqxhr' no Firebug, não consigo encontrar o código de status nem o cabeçalho de resposta 'Local'. Defino o ponto de interrupção na última linha de 'complete'.
Muito obrigado.
ajax
jquery-1.5
Mahesh
fonte
fonte
Respostas:
Eu vejo o campo de status no objeto jqXhr, aqui está uma mexida com ele funcionando:
http://jsfiddle.net/magicaj/55HQq/3/
fonte
Me deparei com esse antigo thread procurando uma solução semelhante e encontrei a resposta aceita para usar o
.complete()
método dejquery ajax
. Cito o aviso no site jquery aqui:Para saber a
status code
resposta de um ajax, pode-se usar o seguinte código:Funciona de maneira semelhante para
.done()
e.fail()
fonte
Provavelmente, é mais jQuery idiomático usar a propriedade statusCode do objeto de parâmetro passado para a função $ .ajax:
No entanto, como Livingston Samuel disse, não é possível capturar 301 códigos de status em javascript.
fonte
Quando sua solicitação XHR retorna uma resposta de redirecionamento (status HTTP 301, 302, 303, 307), ela
XMLHttpRequest
segue automaticamente o URL redirecionado e retorna o código de status desse URL .Você pode obter os códigos de status sem redirecionamento (200, 400, 500 etc) através da
status
propriedade do objeto xhr.Então você não pode obter a localização redirecionado a partir do cabeçalho de resposta de um
301
,302
,303
ou307
pedido.Pode ser necessário alterar a lógica do servidor para responder de uma maneira que você possa manipular o redirecionamento, em vez de permitir que o navegador faça isso. Um exemplo de implementação .
fonte
Você pode verificar o conteúdo do respone, basta console.log e você verá que a propriedade possui um código de status. Se você não entende jsons, consulte o vídeo: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts
Explica conhecimentos muito básicos que permitem que você se sinta mais confortável com o javascript.
Você pode fazer isso com a versão mais curta da solicitação ajax, consulte o código acima:
Exemplo de saída do console:
fonte
jqxhr é um objeto json:
veja: jQuery ajax
então você faria:
jqxhr.status
para obter o statusfonte
NB: Usando o jQuery 3.4.1
fonte