2011-02-17 6 views
2

私はユーザーが姓で検索するフィルタリングをしようとしています。今私はkeypressでそれを持っていますが、もちろんこれはあまりにも多くのAjaxリクエストを行います。jqueryでajaxフィルタを作成するには?

私はこれを行うべきか、テーブルなど、すべての結果(私はそれで情報を持つテーブルを作成する部分図を持っている)

$(function() 
    { 
     $('#LastName').keypress(function() 
     { 

      $.post('ActionMethod', { 'lastName': $(this).val() }, function (response) 
      { 
       $('#results').html(response); 
      }); 
     }); 
    }); 

任意のアイデアを返しています。私はロジックがオートコンプリートと似ていると思うし、あなたはdbをクエリする前にいくつのキーストロークを設定できるのか知っています。

答えて

4

...のようなものについては、私はあなただけでタイムアウトを使用して、AJAX呼び出しの実行を遅らせるべきだと思います。キー操作が実行前に発生した場合は、タイマーをリセット...

$(function() 
    { 
     var timer; 
     $('#LastName').keypress(function() 
     { 
      var _this = this; // we need to store the this to a variable since it will be called out of context from the timeout 
      clearTimeout(timer); 
      timer = setTimeout(function(){ 
         $.post('ActionMethod', { 'lastName': $(_this).val() }, function (response) 
         { 
          $('#results').html(response); 
         }); 
         }, 500); // delay for 500 milliseconds 
     }); 
    }); 
0

はどのように

$(function() 
{ 
    $('#LastName').keypress(function() 
    { 
     if($(this).val().length > 4) 
     { 
      $.post('ActionMethod', { 'lastName': $(this).val() }, function (response) 
      { 
       $('#results').html(response); 
      }); 
     } 
    }); 
}); 
+0

私はそれについて考えていましたが、4は長すぎます。私は、多くのアジア人の名前は2文字(li、maなど)であることを意味します。これは実際には機能しません。私は多分彼らがそれを行う入力を停止するようなものを考えています。 – chobo2

0

あなたは、事前に名前のためのすべての一意の値を負荷に事前に、その配列を使用して仕事ができます。あまりにも多くの値がない場合、これは問題なく機能します。あなたのケースでは、私は数千または何百万ものユニークな姓が存在するのではないかと推測しています...

また、キーストロークの数ではなく、ajax要求の時間制限を設定することもできます。 (ガービーが提案したように)。

関連する問題