何らかの理由で、(ダッシュコードで開発されたアプリケーションで) AJAX を使用している間、ブラウザはアップロードを停止し、0
. なぜこれが起こるのですか?
21 に答える
別のケース:
AJAX 呼び出しを送信し、AJAX 応答を取得する前にブラウザーの更新がトリガーされた0
場合、ステータス コードを取得できる可能性があります。AJAX 呼び出しはキャンセルされ、このステータスになります。
私の経験では、次の場合にステータス0が表示されます。
- クロスサイトスクリプティングの実行(アクセスが拒否された場合)
- 到達不能なURLを要求する(タイプミス、DNSの問題など)
- それ以外の場合、リクエストは傍受されます(広告ブロッカーを確認してください)
- 上記のように、リクエストが中断された場合(ブラウザがページから移動した場合)
を使用すると、ここでも同じ問題が発生し<button onclick="">submit</button>
ます。次に、を使用して解決します<input type="button" onclick="">
ステータス コード 0 は、要求された URL に到達できないことを意味します。http://something/somethingをhttps://something/somethingに変更すると、うまくいきました。ステータス コードが 0 の場合、IE は「権限が拒否されました」というエラーをスローしますが、他のブラウザーはそうではありません。
ajax 呼び出しは、www. 次に、たとえばwwwなしでphpスクリプトを呼び出すと。URL にプレフィックスが含まれている場合、呼び出しは失敗し、その逆も同様です。
この記事は私を助けました。私は AJAX 経由でフォームを送信していましたが、return false
(ajax リクエストの後) 使用するのを忘れていたため、従来のフォームの送信につながりましたが、不思議なことに完了しませんでした。
これは ajax ステータス 0 をグーグルで検索すると表示されるため、無駄な時間を何時間も費やしたヒントを残しておきたいと思いました... 私は ajax を使用して PHP サービスを呼び出していましたが、それはたまたま Phil の Codeigniter 用の REST_Controller でした (これがそれと関係があるかどうかは関係ありません)、ステータス0、レディステート0を取得し続け、それは私を夢中にさせていました. 私はそれをデバッグしていて、メッセージを終了するのではなく、エコーして戻ってくることに気づきました。最後に、デバッグをオフにして試してみましたが、うまくいきました。PHP を使用した xDebug デバッガーが何らかの形で応答を変更していたようです。PHP デバッガーを使用している場合は、それをオフにしてみて、それが役立つかどうかを確認してください。
「偶発的な」フォーム送信は、まさに私が抱えていた問題でした。FORM タグを完全に削除したところ、問題が解決したようです。ありがとう、みんな!
jquery がステータス コード 0 を返す別のケースを見つけました。何らかの理由で XMLHttpRequest が定義されていない場合、このエラーが発生します。
明らかに、これは Web では通常発生しませんが、ナイトリー Firefox ビルドのバグにより、私が書いていたアドオンでこれが発生しました。:)
jquery ajax呼び出しでステータスコード0という同様の問題があり、診断するのに丸一日かかりました。この理由についてはまだ誰も言及していないので、共有したいと思います。
私たちの場合、問題は 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/
。それらが同じアドレスにマップされることを期待していても、リクエストを localhost に送信していないことを確認していません。
私の場合、url: ''
ajax 設定で設定すると、ie8 でステータス コード 0 が返されます。
私にとって、この問題はホスティング会社 (Godaddy) が大量の応答データ (数十キロバイトを超えるもの) を持つ POST 操作を何らかのセキュリティ上の脅威として扱っていたことが原因でした。これらが 1 分間に 6 回以上発生した場合、ホストは次の 1 分間、POST 要求に応答した PHP コードの実行を拒否しました。ホストが代わりに何をしたかは完全にはわかりませんが、tcpdump を使用して、ブラウザーからの POST 要求への応答として TCP リセット パケットが送信されることを確認しました。これにより、jqXHR オブジェクトで返される http ステータス コードが 0 になりました。
操作を POST から GET に変更すると、問題が修正されました。Godaddy がこの制限を課す理由は明らかではありませんが、ホストを変更するよりもコードを変更する方が簡単でした。
私の場合、Firefox アドオンを作成していて、ajax しようとしていた URL/ドメインのアクセス許可を追加するのを忘れていました。