0

jsonデータを取得するAjaxjquery関数($ .post)があります。実行される方法の1つは、250ミリ秒の遅延を伴うキーダウン($('#lkj')。keyup(function(event))によるものです。ただし、1つの問題は、取得されるデータが常に最新であるとは限らないことです。ユーザーはサーバーに対して高いpingを実行します。たとえば「test」と入力すると、jquery .postスクリプトが(入力速度に応じて)2〜4回実行されます。

  1. t
  2. テス
  3. テスト

「te」を含むインスタンスは遅く、最後に完全であるため、「test」を含むインスタンスによって書き込まれた出力を上書きする場合があります。どうすればそれを防ぐことができますか?

4

3 に答える 3

1

1つの手法は、リクエストでシーケンス番号を使用し、最新のリクエストシーケンス番号と一致する場合にのみ出力を処理することです。

例えば:

var reqSeq = 0;

$ .postに電話をかけるとき:

reqSeq++;
$.post('yourserver.com/yoururl?data=X&seq='+reqSeq, function(data) {

    // convert from JSON etc..

    // check if this response is for the latest request, if not, ignore response.
    if(data.seqNum < reqSeq) return;

    // process the response

});
于 2012-09-26T08:34:25.750 に答える
0

Yoyは、結果の作成に使用された応答メッセージ「テキスト」を追加できます。また、現在の日付との互換性についてこのテキスト(役割を果たします-フラグ)を確認してください。現在の値が変更された場合は、結果をintフィールドに入力しないでください。

今すぐajaxリクエストを実行するかどうかを意味するフラグを設定するといいと思います。これは、ユーザーがテキストをすばやく変更し、サーバーが多くの最新の要求を受け取る状況を回避するのに役立ちます。

于 2012-09-26T08:43:26.643 に答える
0

遅延だけでなく、イベントを調整する必要があります。

現在何が起こっているか:「テスト」とすばやく入力します。4つのキーアップイベントが連続して発生し、250ミリ秒後にイベントごとに1つずつ、4つのajaxリクエストを受け取ります。

何をしたいのか:「test」とすばやく入力します。最初のキーアップイベントから250ms以内に別のキーアップイベントが受信された場合は、最初のイベントをキャンセルしてタイマーをリセットし、250ms以内にキーアップを取得するたびにこれを再度実行します。これは、1つのajaxリクエストになります。

これを手動で実装することも、それを処理できるプラグインがあります。これは次のとおりです。

http://benalman.com/projects/jquery-throttle-debounce-plugin/

于 2012-09-26T08:36:54.283 に答える