jQuery Ajax – Código de Status 0?

Por alguma razão, meu aplicativo desenvolvido dashcode acabou de interromper o AJAXing e retorna códigos de status 0. Isso aconteceu com você? Alguém tem uma ideia de por que isso acontece?

   

Outro caso:

Pode ser possível obter um código de status 0 se você enviou uma chamada AJAX e uma atualização do navegador foi acionada antes de obter a resposta AJAX . A chamada AJAX será cancelada e você receberá esse status.

Na minha experiência, você verá um status de 0 quando:

  • fazendo scripts entre sites (onde o access é negado)
  • solicitando um URL inacessível (erros de digitação, problemas de DNS, etc)
  • a solicitação é interceptada (verifique seu bloqueador de anúncios)
  • como acima, se a solicitação for interrompida (o navegador navega para fora da página)

Apesar de provavelmente não estar relacionado ao dashcode , essa pergunta do StackOverflow aparece quando pesquisando o jQuery e um código de status AJAX de 0, então eu pensei em lançar uma resposta para aqueles que estão enfrentando esse problema em outros casos. Eu recentemente encontrei este problema e achei os seguintes links úteis:

O mesmo problema aqui ao usar . Então resolvido usando

Código de status 0 significa que o URL solicitado não está acessível. Mudando http: // alguma coisa / alguma coisa para https: // alguma coisa / alguma coisa funcionou para mim. IE lança um erro dizendo “permissão negada” quando o código de status é 0, outros navegadores não.

É importante observar que as chamadas do ajax podem falhar mesmo dentro de uma session que é definida por um cookie com um determinado domínio prefixado com www. Quando você chama seu script php, por exemplo, sem o www. prefixo na url, a chamada falhará e vice-versa também.

Este artigo me ajudou. Eu estava enviando formulário via AJAX e esqueci de usar o return false (depois do meu pedido de ajax), o que levou ao envio de formulários clássicos, mas, estranhamente, não foi concluído.

Porque isso aparece quando você google ajax status 0 Eu queria deixar alguma dica que só me levou horas de tempo perdido … Eu estava usando ajax para chamar um serviço PHP que passou a ser REST_Controller for Codeigniter de Phil (não tenho certeza se isso tem nada a ver com isso ou não) e continuou recebendo status 0, readystate 0 e foi me deixando louco. Eu estava depurando e notei quando eu iria ecoar e retornar em vez de sair da mensagem que eu teria sucesso. Finalmente eu desviei a debugging e tentei e funcionou. Parece que o depurador do xDebug com o PHP estava de alguma forma modificando a resposta. Se você estiver usando um depurador PHP, tente desativá-lo para ver se isso ajuda.

Eu encontrei um outro caso em que jquery dá-lhe o código de status 0 – se por algum motivo XMLHttpRequest não estiver definido, você receberá esse erro.

Obviamente, isso normalmente não acontece na web, mas um bug em uma compilation noturna do firefox fazia com que isso aparecesse em um complemento que eu estava escrevendo. 🙂

Submissão de formulário “acidental” foi exatamente o problema que eu estava tendo. Acabei de remover completamente as tags FORM e isso parece resolver o problema. Obrigado a todos!

Eu tive o mesmo problema, e estava relacionado ao bloco XSS (cross site scripting) pelo navegador. Eu consegui fazer isso funcionar usando um servidor.

Dê uma olhada em: http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0

Nós tivemos um problema similar – código de status 0 na chamada jquery ajax – e nos levou um dia inteiro para diagnosticá-lo. Como ninguém havia mencionado esse motivo ainda, pensei em compartilhar.

No nosso caso, o problema foi o travamento do servidor HTTP. Algum bug no PHP estava soprando o Apache, então no final do cliente ficou assim:

 mirek@toccata:~$ telnet our.server.com 80 Trying 180.153.xxx.xxx... Connected to our.server.com. Escape character is '^]'. GET /test.php HTTP/1.0 Host: our.server.com Connection closed by foreign host. mirek@toccata:~$ 

onde test.php continha o código de falha. Nenhum dado retornado do servidor (nem mesmo headers) => chamada ajax foi anulada com status 0.

Para mim, o problema foi causado pela empresa de hospedagem (Godaddy), que tratava de operações POST que tinham dados de resposta substanciais (nada mais do que dezenas de kilobytes) como algum tipo de ameaça à segurança. Se mais de 6 dessas ocorreram em um minuto, o host se recusou a executar o código PHP que respondeu à solicitação POST durante o próximo minuto. Eu não tenho certeza do que o host fez em vez disso, mas eu vi, com o tcpdump, um pacote de redefinição de TCP vindo como a resposta a uma solicitação POST do navegador. Isso fez com que o código de status http retornado em um object jqXHR fosse 0.

Alterar as operações de POST para GET resolveu o problema. Não está claro por que o Godaddy impõe esse limite, mas mudar o código foi mais fácil do que mudar o host.

No meu caso, isso foi causado pela execução do meu servidor django em http://127.0.0.1:8000/ mas enviando a chamada do ajax para http://localhost:8000/ . Mesmo que você espere que eles mapeiem para o mesmo endereço, eles não garantem que você não esteja enviando suas solicitações para o host local.

No meu caso, definindo url: '' em configurações ajax resultaria em um código de status 0 em ie8 .. Parece que apenas não tolera tal configuração.

Eu acho que sei o que pode causar esse erro.

No Google Chrome, há um recurso embutido para evitar ataques de dodos para extensões do Google Chrome.

Quando as solicitações ajax retornam continuamente mais de 500 erros de status, elas começam a limitar as solicitações.

Por isso, é possível receber status 0 nos seguintes pedidos.

Em uma tentativa de ganhar o prêmio pela mais estúpida razão para o problema descrito.

Esquecendo de ligar

 xmlhttp.send(); //yes, you need this pivotal line! 

Sim, eu ainda estava recebendo retornos de status de zero da chamada ‘aberta’.

Em nosso caso, o link da página foi alterado de https para http . Mesmo que os usuários estivessem logados, eles foram impedidos de carregar com o AJAX.