AJAX neden HTTP durum kodu 0 döndürüyor?


139

Nedense, AJAX kullanırken geliştirilen uygulama) tarayıcı yüklemeyi durdurur ve durum kodlarını döndürür 0. Bu neden oluyor?

Yanıtlar:


110

Başka bir dava:

Bir durum kodu almak mümkün olabilir 0sen varsa AJAX yanıtı almadan önce bir AJAX arama ve tarayıcı bir yenileme gönderilen tetiklendi . AJAX çağrısı iptal edilecek ve bu durumu alacaksınız.


9
Bunu işaret ettiğiniz için teşekkürler, bir form gönderiminin ajax çağrısını iptal edebileceğini (ve bir tarayıcı yenilemesinin) fark etmemi sağladı.
Magnus Smith

1
Just do<form onsubmit="return false;">
Heitor

1
@ Heitor'un önerisi benim için çalıştı - formumun "gönder" düğmesi sayfayı yeniliyordu, bu arada "gönder" düğmesi tıklatıldığında bir ajax çağrısı çalıştırmaya çalışırken javascript vardı. Sonuç, ajax çağrısının iptal edilmesiydi
Nic Scozzaro

Hey, kaçırdıme.preventDefault();
SparK

97

Deneyimlerime göre, şu durumlarda 0 durumunu göreceksiniz:

  • siteler arası komut dosyası oluşturma (erişimin reddedildiği yer)
  • ulaşılamayan bir URL isteme (yazım hatası, DNS sorunları vb.)
  • istek başka şekilde durdurulur (reklam engelleyicinizi kontrol edin)
  • yukarıdaki gibi, istek kesilirse (tarayıcı sayfadan uzaklaşır)

1
Bağlantı reddedildiğinde bunu alıyorum. Örneğin, sitemde Visual Studio ile hata ayıklama sırasında, hata ayıklama oturumunu durdurduysam, bağlanmaya çalışan herhangi bir istek net :: ERR_CONNECTION_REFUSED alır ve durum kodu sıfır olur. Bu mantıklıdır, çünkü bir sunucu sağlaması gereken sunucuya bağlanamıyorsanız durum kodunuz olamaz.
Triynko

Onaylayabilirim. Web sunucumu kapattıktan sonra status == 0 aldım.
9ilsdx 9rvj 0lo

'siteler arası komut dosyası' nedeniyle hataları var; ne yapmalıyım?

1
@nasimjahednia arama CORS ... erişmeye çalıştığınız sunucunun alanınızdan siteler arası komut dosyası oluşturmasına izin vermesi gerekiyor.
Langdon

Kafam karıştı. HTTP hata kodunu döndürmenin bir yolu yok mu? Bu, burada birçok farklı durum (415, 404, vb.)
Edwin Evans

8

Aynı sorun kullanırken <button onclick="">submit</button>. Sonra kullanarak çözüldü<input type="button" onclick="">


1
Bingo!! Herkes bunun nedenini açıklayabilir mi?
Jorge

3
Varsayılan olarak HTML düğmesi türü 'gönder' dir, bu nedenle tıklandığında form verisi gönderilir. Bu nedenle, tıklama işlemini gerçekleştirir ve ardından göndermeyi dener. 'Button' türünü kullanırsanız, bu artık varsayılan tür değildir ve yalnızca tıklama işlemini gerçekleştirir.
Christophe Roussy

7

Durum kodu 0, istenen URL'ye erişilemediği anlamına gelir. Değiştirerek // şey / bir şey: http için https: // şey / şey benim için çalıştı. Durum kodu 0 olduğunda IE "izin reddedildi" hatası verir, diğer tarayıcılar bunu yapmaz.


Bu durumda, krom şu anda isteği zaman aşımına kadar "Durdu" durumunda bırakacaktır. Bu sunucudan önceki bir istekte döndürülen bir Sıkı Aktarım-Güvenlik bayrağı ya da istekle birlikte gönderilen bir çerezde Güvenli / HttpOnly bayrağı olabilir .
Shane Hughes

7

Ajax çağrılarının www öneki belirli bir alana sahip bir çerez tarafından tanımlanan bir oturumda bile başarısız olabileceğini unutmamak önemlidir. Daha sonra, örneğin www olmadan php betiğinizi çağırdığınızda. url öneki, çağrı başarısız ve viceversa da.


4

Bu makale bana yardımcı oldu. AJAX aracılığıyla form gönderiyordum ve return falseklasik form gönderilmesine yol açan (ajax isteğimden sonra) kullanmayı unuttum, ancak garip bir şekilde tamamlanmadı.


Şafak, bununla tekrar yakalandığımdan nefret ediyorum! <form onsubmit="return false;">hile yaptı.
Heitor

3

Çünkü google ajax durumu 0 ortaya çıktığında çünkü ben sadece boşa zaman saatler sürdü bazı ipucu bırakmak istedim ... Phil Codeigniter için REST_Controller oldu bir PHP hizmeti aramak için ajax kullanıyordum (bu olup olmadığını emin değilim onunla ilgisi olsun ya da olmasın) ve durum 0, readystate 0 almaya devam etti ve beni deli ediyordu. Ben hata ayıklama ve ne zaman yankı ve dönmek yerine başarı elde ediyorum mesaj çıkmak fark ettim. Sonunda hata ayıklamayı kapattım ve denedim ve işe yaradı. PHP ile xDebug hata ayıklayıcı bir şekilde yanıtı değiştiriyor gibi görünüyor. Bir PHP hata ayıklayıcı kullanıyorsanız, yardımcı olup olmadığını görmek için kapatmayı deneyin.


3

JQuery size durum kodu 0 veren başka bir durum buldum - XMLHttpRequest herhangi bir nedenle tanımlanmamışsa, bu hatayı alırsınız.

Açıkçası bu normalde web'de olmayacak, ancak her gece firefox derlemesindeki bir hata bunun yazdığım bir eklentide kırpılmasına neden oldu. :)


1
Bir noktaya değindin, jQuery.ajax()XHR nesnesiyle ilgili bir sorunum vardı . İstek AJAX çağrısında bile oluşturulmadı, yine de f.open almak bir işlev ve durum kodu 0 değil. Neden: $.ajaxSettings.xhrNesneyi $.ajaxSetup({xhr})döndürüyordum, new window.XMLHttpRequest();bunun yerine geri dönüyorum sorunu
çözdüm


2

"Kazara" form gönderme tam olarak yaşadığım sorun oldu. Sadece FORM etiketlerini tamamen kaldırdım ve bu sorunu çözüyor gibi görünüyor. Herkese teşekkürler!


2

Benzer bir sorun yaşadık - jquery ajax çağrısında durum kodu 0 - ve bunu teşhis etmek bizi bütün gün aldı. Henüz kimse bu sebepten bahsetmediği için paylaşacağımı düşündüm.

Bizim durumumuzda sorun HTTP sunucusu çökmesiydi. PHP'deki bazı hatalar Apache'yi esiyordu, bu yüzden istemci sonunda şöyle görünüyordu:

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

Burada test.php kilitlenen kodu içeriyordu. Sunucudan hiçbir veri döndürülmedi (başlıklar bile değil) => ajax çağrısı 0 durumuyla iptal edildi.


2

Benim durumumda, django sunucumu altında çalıştırmak http://127.0.0.1:8000/ama ajax çağrısını göndermek neden oldu http://localhost:8000/. Aynı adresle eşlemelerini bekleseniz de, isteklerinizi localhost'a göndermediğinizden emin değiller.


2

Bizim durumumuzda, sayfa bağlantısı değiştirildi https için http . Kullanıcılar giriş yapmış olsalar da AJAX ile yüklemeleri engellendi.


ilginç. Umarım bu benim durumumdur. İframe'im https ile açıldığından ve sonuçta http'ye ajax gönderdikten sonra durum 0 olsun
sonic

1

Benim durumumda, url: ''ajax ayarlarında ie8 durum kodu 0 ile sonuçlanır .. Görünüşe göre sadece böyle bir ayarı tolere etmez.


1

Benim için sorun, ev sahibi şirket (Godaddy), önemli tepki verisi olan (onlarca kilobayttan fazla) POST işlemlerini bir tür güvenlik tehdidi olarak ele aldı. Bunlardan 6'sından fazlası bir dakika içinde meydana gelirse, ana bilgisayar sonraki dakika boyunca POST isteğine yanıt veren PHP kodunu yürütmeyi reddetti. Ana bilgisayar yerine ne yaptığını tam olarak emin değilim, ama tcpdump ile tarayıcıdan bir POST isteğine yanıt olarak gelen bir TCP sıfırlama paketi gördüm. Bu, bir jqXHR nesnesine döndürülen http durum kodunun 0 olmasına neden oldu.

İşlemleri POST'tan GET'e değiştirmek sorunu çözdü. Godaddy'nin neden bu limiti uyguladığı açık değil, ancak kodu değiştirmek ana bilgisayarı değiştirmekten daha kolaydı.


1

Sanırım bu hataya neyin sebep olabileceğini biliyorum.

Google Chrome'da, Google Chrome uzantılarına yönelik ddos ​​saldırılarını önlemek için yerleşik bir özellik vardır.

Ajax istekleri sürekli 500+ durum hatası döndürdüğünde, istekleri azaltmaya başlar.

Bu nedenle, aşağıdaki istekler üzerine durum 0 almak mümkündür.


1

Açıklanan problem için en aptal nedenden dolayı ödülü kazanmak için.

Telefon etmeyi unutmak

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

Evet, hala 'open' çağrısından sıfır durum döndürme alıyordum.


1

Benim durumumda, bunu sadece Safari Mobile'da alıyordum. Sorun göreli bir URL (whatever.php) yerine tam URL ( http://example.com/whatever.php ) kullanıyordu. Bu bir anlam ifade etmiyor, sitem http : //example.com'da barındırıldığı için XSS sorunu olamaz . Safari http bölümüne bakar ve URL'nin geri kalanını denetlemeden otomatik olarak güvenli olmayan bir istek olarak işaretler.


1

Sorun gidermemde, bu AJAX xmlhttpRequest.status == 0, istemci çağrısının henüz sunucuya ulaşmadığı, ancak istemci tarafında sorun nedeniyle başarısız olduğu anlamına gelebileceğini buldum. Yanıt sunucudan geliyorsa, durum ya 1xx / 2xx / 3xx / 4xx / 5xx HTTP Yanıt kodu olmalıdır. Bundan sonra, sorun giderme MÜŞTERİ sorununa odaklanacaktır ve internet ağı bağlantısı kesilmiş veya yukarıdaki @ Langdon tarafından açıklananlardan biri olabilir.


0

"Aynı Köken Politikası http ajax'ta uzak kaynak okumaya izin vermiyor" mesajını görüyorsanız, istek yaparken tarayıcı Konsolu'nu gözlemleyin. yanıt başlığına "Access-Control-Allow-Origin" ekleyin. exa: java bunu yanıt HttpServletResponse olduğu response.setHeader ("Access-Control-Allow-Origin", "*") gibi ayarlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.