document.onreadystatechange event_javascript スキルの使用状況分析

WBOY
リリース: 2016-05-16 18:44:10
オリジナル
1793 人が閲覧しました

ここ 2 日間、私は部門のプロジェクトを最適化していました。その 1 つは、showDialog というメソッドを Web アプリケーションに実装することです。フロントページで showDialog メソッドを呼び出すことは問題ありませんが、ページが送信されるとバックグラウンドでスクリプトが出力され、showDialog メソッドが呼び出されると、インターネットにアクセスできないエラーが発生することがあります。というサイトが報告されています。デバッグするためにスクリプトにブレークポイントを設定しましたが、問題の原因がまだ見つかりません。最終的にオンラインで調べたところ、この問題はページが完全に読み込まれていないことが原因である可能性があることがわかりました。そのため、コードを修正しました。バックグラウンド出力スクリプトを変更し、それを
document.onreadystatechange=function() { if(document.readyState == 'complete'){ showDialog('Web ページからのメッセージ', 'ユーザー名またはパスワードが間違っています。もう一度お試しください。 enter!', 'warning'); } };
問題は解決しました。

コード document.onreadystatechange = subSomething;//ページの読み込みステータスが変化したときにこのメソッドを実行します。
function subSomething()
{
if(document.readyState == "complete"){ //ページの読み込みステータスが完了したら、
//実行したい操作を入力します。
}
}


説明: onreadystatechange イベントは、readyState 属性の変更を識別できます。
onreadystatechange 属性に関するいくつかの質問
Ajax メソッドを記述するとき、次のようなコードを記述することがよくあります:



コードをコピー コードは次のとおりです:


このコードを初めて読んだとき、何かが間違っていると感じましたが、何が間違っているのかわかりませんでした。 Ajax コードについてさらに学ぶにつれて、この感覚は私の中に残ります。

後になって、この感情がどこから来たのかが分かりました。

startRequest 関数を見てください。 xmlHttp.onreadystatechange が、xmlHttpRequest.readyState が変更されたときにトリガーされる関数を指していることがわかりました。 startRequest 関数をもう一度見て、リクエスト全体を送信する手順を想像してみましょう。次に、ボタンをクリックして startRequest 関数をトリガーします。最初のステップは createXmlHttpRequest() です。その機能は、完了すると xmlHttpRequest.readyState の値が 0 になり、xmlHttp が続行されます。 .onreadystatechange = handlestatechange。状態が変化していないため (xmlHttpRequest.readyState の値が 0)、関数はトリガーされず、その後に Open() と Send() が実行されません。最初から最後まで、結果は正しいのはなぜですか?

その後、window.alert を使用して xmlHttp.readystate の変更を追跡したところ、これがその動作方法であることがわかりました。まず、xmlHttpRequest オブジェクトを作成した後、xmlHttp.readyState の値が 0 になり、xmlHttp.onreadystatechange = handlestatechange が実行されません。次は open() です。この関数が発生すると、xmlHttp.readyState の値は 1 になり、Open() 関数でブレークポイントが発生し、シーンを保持して、xmlHttp.onreadystatechange = handlestatechange に戻り、実行されます。 Send() 関数を実行します。この関数が発生すると、xmlHttp.readyState の値は 2 になり、xmlHttp.onreadystatechange = handlestatechange に戻って実行されます。等々。

ブラウザではオブジェクト指向のようなプログラミングができないので、妥協案を見つけましたが、この方法は地味だと思い、長い間考え、クラスメートと議論した結果、このような方法を思いつきました。解決策の結果。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート