ホームページ  >  記事  >  ウェブフロントエンド  >  Ajax のreadyState とステータスに関連する問題について話し合う

Ajax のreadyState とステータスに関連する問題について話し合う

亚连
亚连オリジナル
2018-05-23 16:58:061763ブラウズ

この記事は主にAjaxのreadyState(ステータス値)とステータス(ステータスコード)に関する問題についての関連情報を紹介しています。非常に優れており、必要な方は参考にしてください。

まず、次の部分を見てください。次に、Ajax の readState (ステータス値) と status (ステータス コード) に関する問題について詳しく説明します。具体的な内容は次のとおりです。 readyState (ステータス値) と status (ステータス コード)

readyState は、AJAX の実行によって経験されるいくつかの状態を指します。アクセスが成功したかどうかに関係なく、AJAX の実行ステップとして理解できます。

を取得するにはreadyState"を使用します。 Statusは、AJAXアクセスが成功したかどうかに関係なく、HTTPプロトコルによって送信された情報に基づいてサーバーによって返されるHTTPヘッダー情報コードを指します。Overallを取得するには、"ajax.status"を使用します理解: 状態は状態全体を表すと簡単に理解できます。そしてステータスとは、この大きな国家の下にある特定の小さなステータスです。


2.readyStateとは



readyStateはXMLHttpRequestオブジェクトの属性であり、現在のXMLHttpRequestオブジェクトの状態を識別するために使用されます。

readyState には、0 から 4 までの合計 5 つのステータス値があります。各値は異なる意味を表します0: 初期化中、XMLHttpRequest オブジェクトはまだ初期化を完了していません

1: 読み込み中、XMLHttpRequest オブジェクトは送信を開始しましたリクエスト


2: 読み込みが完了し、XMLHttpRequest オブジェクトのリクエストが完了します

3: 解析中、XMLHttpRequest オブジェクトがサーバーの応答の読み取りを開始します

4: 完了、XMLHttpRequest オブジェクトがサーバーの応答を読み取り、終了します

3. statusとは

statusは、レスポンスのHTTPステータスコードを示すXMLHttpRequestオブジェクトの属性です

HTTP1.1プロトコルでは、HTTPステータスコードは合計5つのカテゴリに分類できます1xx:情報応答クラス、リクエストが受信され続行されたことを示す 処理 2xx: 処理成功応答クラス、アクションが正常に受信、理解、受け入れられたことを示す

3xx: 指定されたアクションを完了するために、さらなる処理をリダイレクトする応答クラス受け入れられる必要があります

4xx: クライアントエラー、クライアントリクエストに構文エラーが含まれているか、正しく実行できません

5xx: サーバーエラー、サーバーは正しいリクエストを正しく実行できません

100 - クライアントはリクエストを継続する必要があります

101 - クライアントは、サーバーに対し、要求に従って HTTP プロトコルのバージョンを変換するよう要求します

200— - トランザクションは成功しました

201 - 新しいファイルの URL を知るように求めるプロンプトを表示します

202 - 受け入れられ、処理されましたが、処理は行われませんでした完了しました

203 - 返される情報が不確実または不完全です

204 - リクエストは受信されましたが、返されました 情報は空です

205 - サーバーはリクエストを完了しました。ユーザーエージェントは現在閲覧しているファイルをリセットする必要があります

206 -サーバーはユーザーの GET リクエストの一部を完了しました

300 - リクエストされたリソースは複数の場所で利用可能です

301 - リクエストデータを削除します

302 - 他のアドレスで見つかったデータをリクエストします

303 - 顧客に他の URL にアクセスするか、アクセスするよう提案しますメソッド

304 - クライアントは GET を実行しましたが、ファイルは変更されていません

305 - 要求されたリソースは、サーバーによって指定されたアドレスから取得する必要があります

306 - 以前のバージョンの HTTP で使用され、現在は使用されていないコード現在のバージョンでは

307 - 要求されたリソースが一時的に削除されるという宣言

400 - - 構文エラーなどの不正なリクエスト

401 - リクエストの承認が失敗しました

402 - 有効な ChargeTo ヘッダー応答が保持されました

403 - リクエストは保持されていません許可されています

404 - ファイル、クエリ、または URL が見つかりません

405 - Request-Line フィールドでユーザーが定義したメソッドは許可されていません

406 - ユーザーが送信した Accept ドラッグによれば、要求されたリソースはアクセスできません

407 - 401と同様に、ユーザーは最初にプロキシサーバーで承認される必要があります

408 - クライアントクライアントは、ユーザーが指定した時間内にリクエストを完了しませんでした

409 - 現在のリソースに対するリクエストを完了できませんステータス

410 - このリソースはサーバー上にもう存在せず、これ以上の参照アドレスはありません

411 - サーバーはユーザー定義の Content-Length 属性リクエストを拒否します

412 - 現在のリクエスト ヘッダー フィールドが 1 つ以上間違っていますリクエスト

413 - リクエストされたリソースはサーバーが許可する長さを超えています

414 - リクエストされたリソース URL はサーバーが許可する長さを超えています

415 - リクエストされたリソースはリクエスト項目形式をサポートしていません

416 - リクエストには以下が含まれますRange リクエスト ヘッダー フィールド、現在のリクエスト リソース範囲内に範囲指示値が存在せず、リクエストに If-Range リクエスト ヘッダー フィールドが含まれていません

417 ——サーバーは Expect ヘッダー フィールドで指定された期待を満たしていませんプロキシサーバーの場合、次のレベルのサーバーがリクエストを満たすことができない可能性があります

500 ——サーバーが内部エラーを生成しました

501 ——サーバーはリクエストされた機能をサポートしていません

502 ——システムの過負荷を防ぐため、サーバーが一時的に利用できなくなります

503 - サーバーが過負荷になっているか、メンテナンスのために一時停止されています

504 - ゲートの過負荷、サーバーはユーザーに応答するために別のゲートまたはサービスを使用し、待ち時間が発生しています。設定値が長くなっています

505 - サーバーはリクエストヘッダーで指定されたHTTPバージョンをサポートしていないか、サポートを拒否しています

4.思考问题:为什么onreadystatechange的函数实现要同时判断readyState和status呢?

第一种思考方式:只使用readyState

var getXmlHttpRequest = function () {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
var xhr = getXmlHttpRequest();
xhr.open("get", "1.txt", true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
alert(xhr.responseText);
}
};

服务响应出错了,但还是返回了信息,这并不是我们想要的结果

如果返回不是200,而是404或者500,由于只使用readystate做判断,它不理会放回的结果是200、404还是500,只要响应成功返回了,就执行接下来的javascript代码,结果将造成各种不可预料的错误。所以只使用readyState判断是行不通的。

第二种思考方式:只使用status判断

var getXmlHttpRequest = function () {
try{
return new XMLHttpRequest();
}catch(e){
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
var xhr = getXmlHttpRequest();
xhr.open("get", "1.txt", true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.status === 200) {
alert("readyState=" + xhr.readyState + xhr.responseText);
}
};

事实上,结果却不像预期那样。响应码确实是返回了200,但是总共弹出了3次窗口!第一次是“readyState=2”的窗口,第二次是“readyState=3”的窗口,第三次是“readyState=4”的窗口。由此,可见onreadystatechange函数的执行不是只在readyState变为4的时候触发的,而是readyState(2、3、4)的每次变化都会触发,所以就出现了前面说的那种情况。可见,单独使用status判断也是行不通的。

5.由上面的试验,我们可以知道判断的时候readyState和status缺一不可。那么readyState和status的先后判断顺序会不会有影响呢?我们可以将status调到前面先判断,代码如 xhr.status === 200 && xhr.readyState === 4

事实上,这对于最终的结果是没有影响的,但是中间的性能就不同了。由试验我们知道,readyState的每次变化都会触发onreadystatechange函数,假如先判断status,那么每次都会多判断一次status的状态。虽然性能上影响甚微,不过还是应该抱着追求极致代码的想法,把readyState的判断放在前面。

xhr.readyState === 4 && xhr.status === 200

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

全面解析$.Ajax()方法参数(图文教程)

IE8下Ajax缓存问题及解决办法

浅谈ajax请求技术

以上がAjax のreadyState とステータスに関連する問題について話し合うの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。