1

Javascript 側では、イベントリスナーをイベントのテキストに登録しまし<input>onkeyup

イベントがトリガーされるたびに、入力を URL エンコード変数としてリクエストにxmlhttprequest渡すオブジェクトを作成する関数が呼び出されます。valuePOST

リクエスト ページはaspx、post 変数を受け取り、それに何らかの処理を行い、処理された入力をパラメーターとして MS SQL クエリに追加するスクリプトです。クエリの実行から生成された結果セットはdataset、XML に変換された に配置され、XSLT を介して XHTML に変換され、innerHTMLインジェクション メソッドを介して ajax 呼び出しを行ったページに挿入されます。

これまで私をフォローしてきた場合、結果は MS SQL DB での全文検索であり、キー リリースごとに結果が生成されます。また、MS SQL 2005 と IIS6.0 を使用していることにも言及する価値があります。

1 つのテスト ケースを除いて、システムはうまく機能しているようです。501 internal server errorsそれは、サーバーが最終的にリクエストごとに返すことができるのと同じくらい速く入力をパウンドするときです。数分後、それ自体が「修正」され、正常に動作するように見えます。これらの内部エラーに関して、IIS から有益な情報を得ることができませんでした。

これは単なる憶測にすぎませんが、私の最初の仮定は、まだ終了していないオープンな同時リクエストが多すぎるか、短期間に行われたリクエストが多すぎるということでした。

私の最初の考えは、これらのキューxmlhttprequestsを作成し、一度に 1 つだけ開くことでした。

ただし、キューではなく、これを試しました:

それぞれonkeyup:

  1. によって生成されabortた最後の呼び出しxmlhttprequestonkeyup
  2. xmlhttprequestこのための新規作成onkeyup

この手順により、問題が解消されるようです。

私ができなかったのは、この問題の根本原因を特定することでした: サーバーの制限ですか? それともブラウザの制限ですか?この中断手順を必要とせずに、この問題を解決する他の方法はありますか?

必要に応じてコードを投稿できますが、コードは非常に長く、このプロジェクトでは多くのテクノロジが使用されているため、この質問に答えるのに本当に役立つかどうかはわかりません.

4

1 に答える 1

1

あなたはデバウンスを見たいと思うかもしれません。

http://ajaxian.com/archives/debounce-your-javascript-functions

于 2012-04-26T15:03:24.283 に答える