3

私は自分のサイトでBingSearchAPIをインスタント検索結果と統合しようとして、私が書いているコードを少し持っています。jqueryのkeyup関数を使用して、サーバー側のスクリプトにデータを送信します。サーバー側のスクリプトは、bing search xmlを取得し、結果を表示します。

私が心配しているのは、スクリプトに不必要なヒットが多すぎることです。誰かがこれを見て、タイマーとしてキーアップの間に1秒の遅延を設定する方法を教えてもらえますか?だからそれは1秒かそこらごとに結果を更新するだけですか?

これは私がこれまでに作成したものですが、それが正しいかどうかわかりません???

<script type="text/javascript">
var delay = (function() {

    var timer = 0;

    return function(callback, ms) {

        clearTimeout(timer);

        timer = setTimeout(callback, ms);

    };

})();



function reloadsearch() {
    var searchterms = $('#q').val();
    if (searchterms.length >= 3) {
        delay(function() {
            var data = 'source=ajax&q=' + searchterms;
            $.ajax({
                type: "GET",
                url: "results/",
                data: data,
                success: function(html) {
                    if (html !== '') {
                        $("#search-results").html(html);
                        $("#search-results").fadeIn(500);
                    }
                }
            });
        }, 250);
    }

    else

    {
        $("#search-results").fadeOut(250);
    }
};



$('#q').keyup(function() {
    reloadsearch()
});

$(document).ready(function() {
    reloadsearch()
});

4

3 に答える 3

5

これは、入力を受け取り、入力するよりも遅い速度で検索する入力ボックスの例です。

http://jsbin.com/ebela4/8/edit

この例ではajaxの部分は実行されませんが、アイデアは得られます。できるだけ早く入力ボックスに入力してみてください。検索ボックスが遅れて更新されます。状態が「ダーティ」であることを記憶し、必要に応じて更新します。

これで始められることを願っています。

ボブ

于 2010-12-03T22:02:02.770 に答える
1

私はこのようなことをします

    var delay = false;
$('#q').keyup(function() {

if(!delay){
    delay = true;
    reloadsearch().delay(1000);
    delay = false;
});

論理的には動作するはずですが、私は試していません!Syntexにはいくつかの変更が必要な場合があります。

そして、これがうまくいけばこれを助けるコードの平和コードです;)

$(document).ready(function(){

function reloadsearch() {
    var searchterms = $('#q').val();
    if (searchterms.length >= 3) {

            var data = 'source=ajax&q=' + searchterms;
            $.ajax({
                type: "GET",
                url: "results/",
                data: data,
                success: function(html) {
                    if (html !== '') {
                        $("#search-results").html(html);
                        $("#search-results").fadeIn(500);
                    }
                }
            });
       }

    else

    {
        $("#search-results").fadeOut(250);
    }
};

var delayOn = false;
$("#test").click(function(){
if(!delayOn){
delayOn = true;
reloadsearch().delay(2000).queue(function(){delayOn = false;$(this).dequeue();});
        }
                  });
                 });
于 2010-12-03T17:17:05.443 に答える
1

これは、Google の検索に似た例です。ユーザーが入力を一時停止するまで検索は行われません。

http://jsfiddle.net/WNX5q/

于 2010-12-03T22:39:19.673 に答える