Odpowiedzi:
Inna sprawa:
Może być możliwe uzyskanie kodu stanu, 0
jeśli wysłałeś wywołanie AJAX i uruchomiono odświeżanie przeglądarki przed uzyskaniem odpowiedzi AJAX . Połączenie AJAX zostanie anulowane i otrzymasz ten status.
<form onsubmit="return false;">
e.preventDefault();
Z mojego doświadczenia wynika, że stan 0 będzie widoczny, gdy:
Ten sam problem podczas używania <button onclick="">submit</button>
. Następnie rozwiązano za pomocą<input type="button" onclick="">
Kod stanu 0 oznacza, że żądany adres URL jest nieosiągalny. Zmieniając http: // coś / coś na https: // coś / coś działało dla mnie. IE zgłasza błąd mówiąc „Odmowa uprawnień”, gdy kod stanu to 0, inne przeglądarki nie.
Należy zauważyć, że wywołania ajax mogą się nie udać nawet w ramach sesji, która jest definiowana przez plik cookie z określoną domeną poprzedzoną przedrostkiem www. Kiedy następnie wywołasz swój skrypt php, np. Bez www. prefiks w adresie URL, wywołanie zakończy się niepowodzeniem i na odwrót.
Ten artykuł mi pomógł. Wysyłałem formularz przez AJAX i zapomniałem go użyć return false
(po moim żądaniu Ajax), co doprowadziło do przesłania klasycznego formularza, ale o dziwo nie zostało ukończone.
<form onsubmit="return false;">
załatwił sprawę.
Ponieważ to pokazuje się, kiedy google ajax status 0 Chciałem zostawić wskazówkę, która zajęła mi wiele godzin zmarnowanego czasu ... Używałem Ajax do wywołania usługi PHP, która była REST_Controller Phila dla Codeigniter (nie jestem pewien, czy to ma z tym coś wspólnego, czy nie) i ciągle otrzymywałem status 0, readystate 0 i doprowadzało mnie to do szału. Debugowałem go i zauważyłem, że gdy powtarzam i zwracam zamiast zamknąć komunikat, otrzymam sukces. W końcu wyłączyłem debugowanie i spróbowałem i zadziałało. Wygląda na to, że debugger xDebug w PHP w jakiś sposób modyfikował odpowiedź. Jeśli używasz debugera PHP, spróbuj go wyłączyć, aby zobaczyć, czy to pomaga.
Znalazłem inny przypadek, w którym jquery podaje kod statusu 0 - jeśli z jakiegoś powodu XMLHttpRequest nie jest zdefiniowany, otrzymasz ten błąd.
Oczywiście nie zdarza się to normalnie w Internecie, ale błąd w nocnej kompilacji Firefoksa spowodował, że pojawił się w dodatku, który pisałem. :)
jQuery.ajax()
obiektem XHR. Żądanie nie zostało nawet utworzone przy wywołaniu AJAX, nadal otrzymywanie f.open nie jest funkcją i kodem stanu 0. Przyczyna: $.ajaxSettings.xhr
$.ajaxSetup({xhr})
new window.XMLHttpRequest();
Miałem ten sam problem i był on związany z blokowaniem XSS (cross site scripting) przez przeglądarkę. Udało mi się to zrobić przy użyciu serwera.
„Przypadkowe” przesłanie formularza było dokładnie tym problemem, który miałem. Właśnie całkowicie usunąłem tagi FORM i wydaje się, że rozwiązuje to problem. Dziękuję wszystkim!
Mieliśmy podobny problem - kod statusu 0 w wywołaniu jquery ajax - i zdiagnozowanie go zajęło nam cały dzień. Ponieważ nikt jeszcze nie wspomniał o tym powodzie, pomyślałem, że się nim podzielę.
W naszym przypadku problemem była awaria serwera HTTP. Jakiś błąd w PHP zepsuł Apache, więc po stronie klienta wyglądało to tak:
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:~$
gdzie test.php zawierał kod powodujący awarię. Żadne dane nie zostały zwrócone z serwera (nawet nagłówki) => połączenie ajax zostało przerwane ze statusem 0.
W moim przypadku było to spowodowane uruchomieniem mojego serwera django, http://127.0.0.1:8000/
ale wysłaniem wywołania Ajax do http://localhost:8000/
. Nawet jeśli spodziewasz się, że będą mapować na ten sam adres, nie upewniają się więc, że nie wysyłasz żądań do lokalnego hosta.
W naszym przypadku link do strony został zmieniony z https na http . Mimo że użytkownicy byli zalogowani, uniemożliwiono im ładowanie za pomocą AJAX.
Dla mnie problem był spowodowany przez firmę hostingową (GoDaddy), która traktuje operacje POST, które miały znaczące dane odpowiedzi (więcej niż dziesiątki kilobajtów), jako rodzaj zagrożenia bezpieczeństwa. Jeśli więcej niż 6 z nich wystąpiło w ciągu jednej minuty, host odmówił wykonania kodu PHP, który odpowiedział na żądanie POST w ciągu następnej minuty. Nie jestem do końca pewien, co zrobił host zamiast tego, ale widziałem, z tcpdump, pakiet resetowania TCP przychodzący jako odpowiedź na żądanie POST z przeglądarki. Spowodowało to, że kod stanu http zwrócony w obiekcie jqXHR był równy 0.
Zmiana operacji z POST na GET rozwiązała problem. Nie jest jasne, dlaczego GoDaddy nakłada ten limit, ale zmiana kodu była łatwiejsza niż zmiana hosta.
Chyba wiem, co może spowodować ten błąd.
W Google Chrome jest wbudowana funkcja, która zapobiega atakom DDos na rozszerzenia Google Chrome.
Gdy żądania AJAX stale zwracają błędy statusu 500+, zaczyna ograniczać żądania.
Stąd możliwe jest otrzymanie statusu 0 przy kolejnych żądaniach.
Próbując wygrać nagrodę z najgłupszego powodu opisanego problemu.
Zapominanie o telefonie
xmlhttp.send(); //yes, you need this pivotal line!
Tak, nadal otrzymywałem zerowe statusy w wywołaniu „open”.
W moim przypadku otrzymywałem to, ale tylko w Safari Mobile. Problem w tym, że użyłem pełnego adresu URL ( http://example.com/cokolwiek.php ) zamiast względnego (cokolwiek.php). Nie ma to jednak sensu, nie może to być problem z XSS, ponieważ moja witryna jest hostowana pod adresem http://example.com . Wydaje mi się, że Safari sprawdza część http i automatycznie oznacza ją jako niezabezpieczone żądanie bez sprawdzania pozostałej części adresu URL.
Podczas rozwiązywania problemów stwierdziłem, że ten xmlhttpRequest.status AJAX == 0 może oznaczać, że połączenie klienta NIE dotarło jeszcze do serwera, ale nie udało się z powodu problemu po stronie klienta. Jeśli odpowiedź pochodzi z serwera, stan musi mieć postać kodu odpowiedzi HTTP 1xx / 2xx / 3xx / 4xx / 5xx. Odtąd rozwiązywanie problemów powinno koncentrować się na problemie KLIENTA i może spowodować przerwanie połączenia internetowego lub jedno z opisanych przez @ Langdon powyżej.
Obserwuj konsolę przeglądarki podczas wysyłania żądania, jeśli widzisz komunikat „Te same zasady pochodzenia nie pozwalają na odczytywanie zdalnego zasobu pod adresem http ajax ..... powód: brak nagłówka cors„ access-control-allow-origin ””, to musisz dodaj „Access-Control-Allow-Origin” w nagłówku odpowiedzi. exa: w java możesz ustawić to jak response.setHeader ("Access-Control-Allow-Origin", "*"), gdzie odpowiedzią jest HttpServletResponse.