1

私はここにいるのは初めてなので、お手柔らかにお願いします。これはやや混乱した状況です。:)

ユーザーが別のユーザーの名前 (または名前の一部) を検索テキスト ボックスに入力すると、その検索文字列に一致するユーザーのリストが返される検索入力に取り組んでいます。問題は、何万人ものユーザーが関与している場合、少し遅いことです。この遅さのため、ユーザーが検索入力にすばやく名前を入力すると、画面はキーストロークごとに検索結果をフラッシュし始めます (ユーザーが検索文字列を既に入力した後)。かなり反応が遅れているようです。

たとえば、「Wendy」という名前を入力すると、検索文字列「W」(入力した最初の文字) の検索結果はまだ表示されません。文字「W」の検索結果が表示され、続いて「We」などが続きますが、私はすでにフルネームを入力しており、「Wendy」の結果を表示したいだけです。

私がやりたいのは、ユーザーが一定時間何も入力していない場合にのみ検索を実行することです (私は2秒間考えています)。それ以外の場合は、「検索中」という単語が表示されます。Javascript メソッドのコードは次のとおりです。注意として、そのコードは現在ユーザーを検索するために機能していますが、遅延実行を実装する必要があるだけです。

function updateSearchResults() {
    if($F('searchString').length > 0){
        Element.update($('searchResultsScrollBox'), '<h3>Searching...</h3>'); 
        $('searching').style.display = 'block';
        var url = '<c:url value='ajaxFrontGetUsers.html'/>';
        var ajax = new Ajax.Updater({success: 'searchResults'}, url,
        {method: 'post', parameters: $('searchForm').serialize(true)});
         $('searching').style.display = 'none';
     }
}

これがすべて理にかなっていることを願っています。助けていただける方、よろしくお願いします。

4

4 に答える 4

2

次の手順を試してください。

  1. 数ミリ秒ごとに、テキストボックスに新しいデータが含まれているかどうかを確認します。
  2. テキストボックスに新しいテキストがある場合は、Ajaxを実行し、テキストを変数にコピーします(手順1で比較するため)。

そこからパフォーマンスを向上させたい場合は、ユーザーが何かを入力するたびにタイマーをアクティブにし、Ajax呼び出しが行われたときにタイマーを非アクティブにします。

于 2009-08-05T19:39:06.440 に答える
0

ねえ、あなたの答えをありがとう。最終的に 500 ミリ秒の間隔を設定し、JavaScript 関数がその 500 ミリ秒の時間内に検索文字列に新しい文字が入力されたかどうかを継続的にチェックしました。そうであれば、ユーザーが入力した文字列を検索するために検索関数が呼び出されます。それ以外の場合は、ユーザーが入力を停止するまで、さらに 500 ミリ秒待機します。結局、それはあなたが提案したものと非常に似ています。再度、感謝します!

于 2009-08-06T17:54:30.687 に答える