回答:
別のケース:
AJAX呼び出しを送信し、AJAX応答を取得する前にブラウザの更新がトリガーされた0
場合、ステータスコードを取得することが可能です。AJAX呼び出しはキャンセルされ、このステータスが表示されます。
<form onsubmit="return false;">
e.preventDefault();
私の経験では、次の場合にステータス0が表示されます。
を使用する場合のここでの同じ問題<button onclick="">submit</button>
。次に、使用して解決しました<input type="button" onclick="">
ステータスコード0は、リクエストされたURLに到達できないことを意味します。変更することで//何か/何かます:httpへのhttps://何か/何かが私のために働きました。ステータスコードが0の場合、IEは「許可が拒否されました」というエラーをスローしますが、他のブラウザはそうしません。
これはgoogle ajaxステータス0を表示したときに表示されるので、何時間も無駄に費やしただけのヒントを残したいと思いました... ajaxを使用して、偶然にCodeigniterのPhilのREST_ControllerであるPHPサービスを呼び出していました(これがあるかどうかはわかりません)それと関係があるかどうかにかかわらず)、ステータス0、readystate 0を取得し続け、それは私を混乱させていました。私はそれをデバッグしていて、メッセージを終了する代わりにエコーして戻ると、成功することに気づきました。最後に、デバッグをオフにして試しましたが、うまくいきました。PHPを使用するxDebugデバッガーが応答を変更しているようです。PHPデバッガーを使用している場合は、それをオフにして、効果があるかどうかを確認してください。
jqueryがステータスコード0を返す別のケースを見つけました-何らかの理由でXMLHttpRequestが定義されていない場合、このエラーが発生します。
明らかにこれは通常Webでは発生しませんが、Firefoxの毎晩のビルドのバグにより、私が書いていたアドオンでこれが発生しました。:)
jQuery.ajax()
おっしゃったとおり、XHRオブジェクトに問題がありました。リクエストはAJAX呼び出しでも作成されませんでしたが、それでもf.openは関数ではなく、ステータスコード0を取得します。原因:$.ajaxSettings.xhr
からオブジェクトを$.ajaxSetup({xhr})
返していましたが、new window.XMLHttpRequest();
代わりに問題を解決しました
私も同じ問題を抱えていましたが、ブラウザによるXSS(クロスサイトスクリプティング)ブロックに関連していました。サーバーを使用してなんとか動作させることができました。
見てください:http : //www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0
「偶発的な」フォームの送信は、まさに私が抱えていた問題でした。FORMタグを完全に削除したところ、問題が解決したようです。みなさんありがとう!
同様の問題(jquery ajax呼び出しのステータスコード0)があり、診断に1日かかりました。この理由についてはまだ誰も触れていなかったので、共有します。
私たちの場合、問題はHTTPサーバーのクラッシュでした。PHPのいくつかのバグがApacheを破壊していたため、クライアント側では次のようになりました。
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:~$
test.phpにはクラッシュするコードが含まれています。サーバーから返されるデータはありません(ヘッダーも含まれません)=> ajax呼び出しはステータス0で中止されました
私の場合、それは私のdjangoサーバーを実行してhttp://127.0.0.1:8000/
いるがajax呼び出しをに送信したことが原因でしたhttp://localhost:8000/
。それらが同じアドレスにマップすることを期待するとしても、ローカルホストにリクエストを送信していないことを確認してください。
今回のケースでは、ページのリンクがhttpsからhttpに変更されました。ユーザーがログインしていても、AJAXでのロードが阻止されていました。
私にとっての問題は、ホスティング会社(Godaddy)が、実質的な応答データ(数十キロバイトを超えるもの)を含むPOST操作を、ある種のセキュリティの脅威として扱うことによって引き起こされました。これらのうち6つを超えるものが1分間に発生した場合、ホストは次の1分間にPOSTリクエストに応答するPHPコードの実行を拒否しました。ホストが代わりに何をしたかは完全にはわかりませんが、tcpdumpで、ブラウザーからのPOST要求への応答として送信されるTCPリセットパケットを確認しました。これにより、jqXHRオブジェクトで返されるhttpステータスコードが0になりました。
操作をPOSTからGETに変更すると、問題が修正されました。Godaddyがこの制限を課す理由は明らかではありませんが、コードを変更する方がホストを変更するよりも簡単でした。
私の場合、これはSafari Mobileでしか得られませんでした。問題は、相対URL (whatever.php)ではなく完全なURL(http://example.com/whatever.php)を使用していたことです。これは意味がありませんが、私のサイトはhttp://example.comでホストされているため、XSSの問題になることはありません。Safariはhttpの部分を調べ、残りのURLを検査せずに、安全でない要求として自動的にフラグを立てると思います。
私のトラブルシューティングで、このAJAX xmlhttpRequest.status == 0は、クライアント呼び出しがまだサーバーに到達していないが、クライアント側の問題が原因で失敗したことを意味する可能性があることを発見しました。応答がサーバーからのものであった場合、ステータスは1xx / 2xx / 3xx / 4xx / 5xx HTTP応答コードのいずれかである必要があります。今後、トラブルシューティングはクライアントの問題に焦点を当てる必要があり、インターネットネットワーク接続のダウン、または上記の@Langdonで説明されているもののいずれかである可能性があります。
リクエストの作成中にブラウザのコンソールを確認します。「同じオリジンポリシーにより、http ajaxでリモートリソースを読み取ることができません...理由:corsヘッダー 'access-control-allow-origin'がありません」と表示される場合は、応答ヘッダーに「Access-Control-Allow-Origin」を追加します。exa:Javaでは、response.setHeader( "Access-Control-Allow-Origin"、 "*")のように設定できます。ここで、responseはHttpServletResponseです。