2016-09-22 16 views
4

は私のコードです:彼は彼のタグを入力しているときajaxリクエストの送信を遅延させるにはどうすればよいですか?ここ

$("input").on('keydown', function(){ 
    $.ajax({ 
     url : '/files/tags_autocomplete.php', 
     dataType : 'JSON', 
     success : function (tags) { 
      $("ul").html(tags.output); 
     } 
    }); 
}); 

私のコードは、オートコンプリートボックスとしてユーザにいくつかのタグ(ユーザーがこれまでに書かれたものと一致した部分文字列を持っているもの)を示唆します。

私の問題は何ですか?私の現在のコードは、keydownごとに新しいAjaxリクエストを送信します。たとえば、ユーザがsomethingと書くと、私のスクリプトは悪夢のように思える9つのAjaxリクエストを送信します。

とにかく、どうすれば対応できますか?私は送信のための遅延を実装する必要があるのですか? のようなもの "最後の文字が挿入されてから1秒後にリクエストを送信しないでください"?それとも良いアイデアはありますか?

+0

を作成することができます。それはあなたの要求された機能を内蔵しています。http://jqueryui.com/autocomplete/。オートコンプリートのために* just *を使うのは価値がないかもしれませんが、一見価値があります。 –

+0

@JasonPあなたが提供したリンクをありがとうございます..しかし、私はそれを見ました。あなたが言ったように、オートコンプリートのためだけに手頃な価格ではありません。私は必要なjQuery UIのすべての部分をダウンロードできると聞いていましたが(例えば、オートコンプリート部分のみをダウンロードできます)* –

答えて

6

あなたはjQueryのUIのオートコンプリートを検討するかもしれない簡単な絞り機構

$("input").on('keydown', function(){ 

    clearTimeout($(this).data('timer');) 

    var timer = setTimeout(function() { 
     $.ajax({ 
      url : '/files/tags_autocomplete.php', 
      dataType : 'JSON', 
      success : function (tags) { 
       $("ul").html(tags.output); 
      } 
     }); 
    }, 500); 

    $(this).data('timer', timer); 
}); 
+0

ああ、すごくいいです。私の情報のために、これは標準的なアプローチですか?例えば、stackoverflowはそれをどのようにしますか? –

+0

@MartinAJ - これは珍しいことではありません。私はそれが何をしているのか分からない? – adeneo

+0

私は[どのようにこれを処理する](http://i.stack.imgur.com/8tuTU.png)だったのですが、決して気にしません。 –

関連する問題