URL をブロックしているローカル (またはローカル ネットワーク) のファイアウォールが、この URL への Ajax リクエストが ReadyState 4 に到達するのを妨げていることは理解しています。これは正しいですか?
質問する
534 次
1 に答える
1
はい、そうなります。たとえば、このコードを見てください。
function readyStateCallback () {
jsprint(this.readyState);
};
var oReq = new XMLHttpRequest();
oReq.onreadystatechange = readyStateCallback;
oReq.open("get", "http://foobarbaz.nnn", true);
oReq.send();
この fiddleで試すことができます。すべての要求は、準備完了状態 1 および 4 をトリガーしますが、必ずしも準備完了状態 2 または 3 とは限りません。
XMLHttpRequest MDN ドキュメントを参照してください。
0 UNSENT open() has not been called yet.
1 OPENED send() has not been called yet.
2 HEADERS_RECEIVED send() has been called, and headers and status are available.
3 LOADING Downloading; responseText holds partial data.
4 DONE The operation is complete.
要求が失敗したかどうか (ファイアウォールによってブロックされているなど) を判断するには、this.status を確認します。適切なリクエストの場合、これは 200 になります。応答を受け取らなかったリクエストの場合、これは 0 になります。
status 属性は、次の手順を実行した結果を返す必要があります。
- 状態が UNSENT または OPENED の場合は、0 を返し、これらの手順を終了します。
- エラー フラグが設定されている場合は、0 を返し、これらの手順を終了します。
- HTTP ステータス コードを返します。
ネットワーク エラーは次のように説明されます。
DNS エラー、TLS ネゴシエーションの失敗、またはその他の種類のネットワーク エラー エラーが発生した場合に onreadystatechange イベントが発生することについても説明します。準備状態は 4 になります。
ファイアウォールは通常、DNS 解決を禁止するか、TLS パケットが正常に送信されないようにします。
于 2013-08-28T15:02:28.487 に答える