web-dev-qa-db-fra.com

jQuery Ajax - Code de statut 0?

Pour une raison quelconque, mon dashcode application développée vient de quitter AJAXing et renvoie des codes de statut de 0. Cela vous est-il arrivé? Quelqu'un at-il une idée pourquoi cela se produit?

127
tarnfeld

Un autre cas:

Il pourrait être possible d'obtenir un code d'état de 0 si vous avez envoyé un appel AJAX et qu'un rafraîchissement du navigateur a été déclenché avant d'obtenir la réponse AJAX . L'appel AJAX sera annulé et vous obtiendrez cet état.

105
mnk

D'après mon expérience, vous verrez l'état 0 lorsque:

  • faire du script entre sites (où l'accès est refusé)
  • demander une URL inaccessible (faute de frappe, problèmes de DNS, etc.)
  • la demande est par ailleurs interceptée (vérifiez votre bloqueur de publicité)
  • comme ci-dessus, si la demande est interrompue (le navigateur quitte la page)
89
Langdon

Bien que cela ne soit probablement pas lié à dashcode , cette question de StackOverflow se pose lorsque googler jQuery et un code de statut AJAX égal à 0, alors j’ai pensé donner une réponse à ceux qui se heurtent à ce problème pour d’autres. cas. J'ai récemment rencontré ce problème et j'ai trouvé les liens suivants utiles:

18
justkt

Même problème ici en utilisant <button onclick="">submit</button>. Puis résolu en utilisant <input type="button" onclick="">

8
Rafi

Le code d'état 0 signifie que l'URL demandée n'est pas accessible. En changeant http: // quelque chose/quelque chose en https: // quelque chose/quelque chose a fonctionné pour moi. IE a généré une erreur indiquant "autorisation refusée" lorsque le code d'état est 0, mais les autres navigateurs ne le font pas.

7
Jagadeesh

Il est important de noter que les appels ajax peuvent échouer même dans une session définie par un cookie avec un certain domaine préfixé par www. Lorsque vous appelez ensuite votre script php, par exemple sans le www. préfixe dans l'URL, l'appel échouera et vice-versa. 

6
nuxxxx

Cet article m'a aidé. Je soumettais le formulaire via AJAX et j'avais oublié d'utiliser return false (après ma demande ajax), ce qui conduisait à la soumission d'un formulaire classique, mais étrangement, il n'était pas terminé.

3
Martin Vseticka

La soumission de formulaire "accidentelle" était exactement le problème que j'avais. Je viens de supprimer complètement les balises FORM et cela semble résoudre le problème. Merci tout le monde!

2
Insider Pro

J'ai trouvé un autre cas où jquery vous donne le code d'état 0 - si, pour une raison quelconque, XMLHttpRequest n'est pas défini, vous obtiendrez cette erreur.

Évidemment, cela ne se produira normalement pas sur le Web, mais un bogue dans une version nocturne de firefox l'a fait apparaître dans un add-on que j'écrivais. :)

2
starwed

J'ai eu le même problème, et il était lié au blocage XSS (Cross Site Scripting) par le navigateur. J'ai réussi à le faire fonctionner en utilisant un serveur.

Jetez un oeil à: http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0

2
Ricardo Rivaldo

Parce que cela apparaît lorsque vous recherchez le statut ajax 0 dans Google. Je voulais laisser une astuce qui me prenait juste des heures de temps perdu ... J'utilisais ajax pour appeler un service PHP qui se trouvait être le contrôleur REST_ de Phil pour Codeigniter (non bien sûr si cela a quelque chose à voir avec cela ou pas) et continue à obtenir le statut 0, relire 0 et il me rendait fou. J'étais en train de le déboguer et j'ai remarqué que quand j'allais faire écho et retourner au lieu de quitter le message, j'aurais du succès. Enfin, j'ai désactivé le débogage, essayé et cela a fonctionné. Il semble que le débogueur xDebug avec PHP était en train de modifier la réponse. Si vous utilisez un débogueur PHP, essayez de le désactiver pour voir si cela vous aide.

2
michael

Dans mon cas, cela était dû à l'exécution de mon serveur Django sous http://127.0.0.1:8000/ mais à l'envoi de l'appel ajax à http://localhost:8000/. Même si vous vous attendez à ce qu'ils correspondent à la même adresse, ils ne s'assurent pas que vous n'envoyiez pas vos demandes à localhost.

1
Vlad Schnakovszki

Nous avions un problème similaire - code d’état 0 sur jquery ajax call - et il nous a fallu toute une journée pour le diagnostiquer. Comme personne n'avait encore mentionné cette raison, je pensais partager.

Dans notre cas, le problème était un crash du serveur HTTP. Un bug dans PHP soufflait dans Apache, ainsi, côté client, cela ressemblait à ceci:

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:~$ 

où test.php contenait le code bloquant . Aucune donnée renvoyée par le serveur (pas même les en-têtes) => L'appel ajax a été abandonné avec le statut 0.

1
jmper

Pour moi, le problème était causé par la société d’hébergement (Godaddy) qui traitait les opérations POST pour lesquelles des données de réponse substantielles (plus de quelques dizaines de kilo-octets) constituaient une sorte de menace à la sécurité. Si plus de 6 d'entre eux se sont produits en une minute, l'hôte a refusé d'exécuter le code PHP ayant répondu à la demande POST au cours de la minute suivante. Je ne suis pas tout à fait sûr de ce que l’hôte a fait à la place, mais j’ai vu, avec tcpdump, un paquet de réinitialisation TCP venant en réponse à une demande POST du navigateur. Le code d’état http renvoyé dans un objet jqXHR était donc 0.

Le passage des opérations de POST à GET a résolu le problème. Pourquoi GoDaddy impose-t-il cette limite, mais changer le code était plus facile que de changer l'hôte.

1
emrys57

Dans notre cas, le lien de page a été changé de https à http. Même si les utilisateurs étaient connectés, ils ne pouvaient pas charger avec AJAX.

0
Andy In NC

Dans mon cas, je l’obtenais, mais seulement sur Safari Mobile. Le problème est que j'utilisais l'URL complète ( http://example.com/witely.php ) à la place de la valeur relative (what.php). Cela n'a aucun sens cependant, cela ne peut pas être un problème XSS car mon site est hébergé sur http://example.com . J'imagine que Safari examine la partie http et la marque automatiquement comme une demande non sécurisée sans inspecter le reste de l'URL.

0
Raúl Bojalil

Je pense savoir ce qui peut causer cette erreur.

Dans Google Chrome, une fonctionnalité intégrée empêche les attaques DDOS pour les extensions Google Chrome.

Lorsque les demandes ajax renvoient en permanence plus de 500 erreurs d’état, elles commencent à limiter les demandes.

Il est donc possible de recevoir le statut 0 sur les demandes suivantes.

0
Anonymous

Dans une tentative de gagner le prix pour la raison la plus stupide du problème décrit.

Oublier d'appeler 

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

Oui, je recevais toujours le statut zéro de l'appel "ouvert". 

0
Gordon Rouse

Lors de mon dépannage, j'ai trouvé que AJAX xmlhttpRequest.status == 0 pouvait signifier que l'appel du client n'avait PAS encore atteint le serveur, mais échouait à cause d'un problème côté client. Si la réponse provenait du serveur, l'état doit être soit le code de réponse HTTP 1xx/2xx/3xx/4xx/5xx. Désormais, le dépannage doit être axé sur le problème du client. Il peut s’agir d’une connexion Internet interrompue ou de l’une de celles décrites par @Langdon ci-dessus.

0
Panini Luncher

Observez la console du navigateur tout en faisant la demande. Si vous voyez "La même règle d'origine interdit de lire la ressource distante à l'adresse http ajax ..... raison: en-tête cors" accès-contrôle-autoriser-origine "manquant", vous devez ajoutez "Access-Control-Allow-Origin" dans l'en-tête de la réponse. exa: en Java, vous pouvez définir ceci comme response.setHeader ("Access-Control-Allow-Origin", "*") où la réponse est HttpServletResponse.

0
Mahadev Mandale

Dans mon cas, définir url: '' dans les paramètres ajax donnerait un code de statut 0 dans ie8 .. Il semble que le système ne tolère tout simplement pas un tel paramètre.

0
blurrcat