Antworten:
Ein anderer Fall:
Möglicherweise können Sie einen Statuscode abrufen,0
wenn Sie einen AJAX-Anruf gesendet haben und eine Aktualisierung des Browsers ausgelöst wurde, bevor Sie die AJAX-Antwort erhalten . Der AJAX-Anruf wird abgebrochen und Sie erhalten diesen Status.
<form onsubmit="return false;">
e.preventDefault();
Nach meiner Erfahrung wird der Status 0 angezeigt, wenn:
Gleiches Problem hier bei der Verwendung <button onclick="">submit</button>
. Dann gelöst mit<input type="button" onclick="">
Der Statuscode 0 bedeutet, dass die angeforderte URL nicht erreichbar ist. Durch Ändern von http: // etwas / etwas in https: // etwas / etwas hat es für mich funktioniert. IE gibt einen Fehler aus, der besagt, dass "Berechtigung verweigert" ist, wenn der Statuscode 0 ist, andere Browser nicht.
Es ist wichtig zu beachten, dass Ajax-Aufrufe auch innerhalb einer Sitzung fehlschlagen können, die durch ein Cookie mit einer bestimmten Domain definiert wird, der www vorangestellt ist. Wenn Sie dann Ihr PHP-Skript aufrufen, zB ohne das www. Präfix in der URL, der Anruf schlägt fehl und umgekehrt auch.
Dieser Artikel hat mir geholfen. Ich habe das Formular über AJAX gesendet und vergessen return false
(nach meiner Ajax-Anfrage), es zu verwenden, was zur klassischen Formularübermittlung führte, aber seltsamerweise wurde es nicht ausgefüllt.
<form onsubmit="return false;">
hat den Trick gemacht.
Da dies angezeigt wird, wenn Sie den Ajax-Status 0 googeln, wollte ich einen Tipp hinterlassen, der mir nur Stunden verschwendeter Zeit gekostet hat ... Ich habe Ajax verwendet, um einen PHP-Dienst aufzurufen, der zufällig Phils REST_Controller für Codeigniter ist (nicht sicher, ob dies der Fall ist) irgendetwas damit zu tun oder nicht) und bekam immer wieder Status 0, Readystate 0 und es machte mich verrückt. Ich habe es debuggt und festgestellt, wann ich ein Echo erhalte und zurückkehre, anstatt die Nachricht zu beenden, dass ich Erfolg haben würde. Schließlich schaltete ich das Debuggen aus und versuchte es und es funktionierte. Der xDebug-Debugger mit PHP hat die Antwort anscheinend irgendwie geändert. Wenn Sie einen PHP-Debugger verwenden, schalten Sie ihn aus, um festzustellen, ob dies hilfreich ist.
Ich habe einen anderen Fall gefunden, in dem jquery Ihnen den Statuscode 0 gibt. Wenn XMLHttpRequest aus irgendeinem Grund nicht definiert ist, wird dieser Fehler angezeigt.
Natürlich passiert dies normalerweise nicht im Web, aber ein Fehler in einem nächtlichen Firefox-Build führte dazu, dass dies in einem Add-On auftauchte, das ich schrieb. :) :)
jQuery.ajax()
hingewiesen , ich hatte ein Problem mit dem XHR-Objekt. Die Anfrage wurde nicht einmal beim AJAX-Aufruf erstellt. Das Abrufen von f.open ist keine Funktion und kein Statuscode 0. Verursacht durch: Ich habe ein $.ajaxSettings.xhr
Objekt von $.ajaxSetup({xhr})
zurückgegeben und new window.XMLHttpRequest();
stattdessen das Problem gelöst
Ich hatte das gleiche Problem und es hing mit dem XSS-Block (Cross Site Scripting) durch den Browser zusammen. Ich habe es geschafft, es mit einem Server zum Laufen zu bringen.
Schauen Sie sich Folgendes an: http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0
Das "versehentliche" Absenden des Formulars war genau das Problem, das ich hatte. Ich habe gerade die FORM-Tags komplett entfernt und das scheint das Problem zu beheben. Dank euch allen!
Wir hatten ein ähnliches Problem - Statuscode 0 beim Aufruf von jquery ajax - und wir haben den ganzen Tag gebraucht, um es zu diagnostizieren. Da noch niemand diesen Grund erwähnt hatte, dachte ich, ich werde teilen.
In unserem Fall war das Problem ein Absturz des HTTP-Servers. Ein Fehler in PHP hat Apache in die Luft gejagt, so dass es auf Client-Seite so aussah:
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:~$
Dabei enthielt test.php den Absturzcode. Keine vom Server zurückgegebenen Daten (nicht einmal Header) => Ajax-Aufruf wurde mit dem Status 0 abgebrochen.
In meinem Fall wurde dies dadurch verursacht, dass mein Django-Server unter ausgeführt wurde, http://127.0.0.1:8000/
aber der Ajax-Aufruf an gesendet wurde http://localhost:8000/
. Obwohl Sie erwarten würden, dass sie derselben Adresse zugeordnet werden, stellen sie nicht sicher, dass Sie Ihre Anfragen nicht an localhost senden.
In unserem Fall wurde der Seitenlink von https in http geändert . Obwohl die Benutzer angemeldet waren, konnten sie nicht mit AJAX geladen werden.
In meinem Fall würde die Einstellung url: ''
in Ajax-Einstellungen zu einem Statuscode 0 in ie8 führen. Es scheint, dass eine solche Einstellung einfach nicht toleriert wird.
Für mich wurde das Problem dadurch verursacht, dass das Hosting-Unternehmen (Godaddy) POST-Vorgänge mit erheblichen Antwortdaten (mehr als zehn Kilobyte) als eine Art Sicherheitsbedrohung behandelte. Wenn mehr als 6 davon in einer Minute auftraten, weigerte sich der Host, den PHP-Code auszuführen, der in der nächsten Minute auf die POST-Anfrage antwortete. Ich bin nicht ganz sicher, was der Host stattdessen getan hat, aber ich habe mit tcpdump ein TCP-Reset-Paket als Antwort auf eine POST-Anfrage vom Browser gesehen. Dies führte dazu, dass der in einem jqXHR-Objekt zurückgegebene http-Statuscode 0 war.
Das Ändern der Operationen von POST zu GET hat das Problem behoben. Es ist nicht klar, warum Godaddy diese Grenze auferlegt, aber das Ändern des Codes war einfacher als das Ändern des Hosts.
Ich glaube zu wissen, was diesen Fehler verursachen kann.
In Google Chrome gibt es eine integrierte Funktion, um DDOS-Angriffe für Google Chrome-Erweiterungen zu verhindern.
Wenn Ajax-Anforderungen kontinuierlich mehr als 500 Statusfehler zurückgeben, werden die Anforderungen gedrosselt.
Daher ist es möglich, bei folgenden Anforderungen den Status 0 zu erhalten.
In einem Versuch, den Preis aus dem dümmsten Grund für das beschriebene Problem zu gewinnen.
Vergessen zu rufen
xmlhttp.send(); //yes, you need this pivotal line!
Ja, ich habe beim Status "Offen" immer noch eine Statusrückgabe von Null erhalten.
In meinem Fall bekam ich das aber nur auf Safari Mobile. Das Problem ist, dass ich die vollständige URL ( http://example.com/whatever.php ) anstelle der relativen URL (Whatever.php) verwendet habe. Dies macht jedoch keinen Sinn, es kann kein XSS-Problem sein, da meine Website unter http://example.com gehostet wird . Ich denke, Safari betrachtet den http-Teil und kennzeichnet ihn automatisch als unsichere Anforderung, ohne den Rest der URL zu überprüfen.
Bei meiner Fehlerbehebung stellte ich fest, dass AJAX xmlhttpRequest.status == 0 bedeuten könnte, dass der Clientaufruf den Server noch NICHT erreicht hat, aber aufgrund eines Problems auf der Clientseite fehlgeschlagen ist. Wenn die Antwort vom Server stammt, muss der Status entweder der HTTP-Antwortcode 1xx / 2xx / 3xx / 4xx / 5xx sein. Von nun an konzentriert sich die Fehlerbehebung auf das CLIENT-Problem und kann eine unterbrochene Internet-Netzwerkverbindung oder eine der oben von @Langdon beschriebenen sein.
Beobachten Sie die Browser-Konsole, während Sie die Anfrage stellen. Wenn Sie sehen, dass "Die gleiche Ursprungsrichtlinie das Lesen der Remote-Ressource unter http ajax nicht zulässt ..... Grund: Der Cors-Header 'Zugriffskontrolle-Zulassen-Ursprung' fehlt", müssen Sie dies tun Fügen Sie "Access-Control-Allow-Origin" in den Antwortheader ein. Beispiel: In Java können Sie dies wie response.setHeader ("Access-Control-Allow-Origin", "*") festlegen, wobei die Antwort HttpServletResponse ist.