0

OK、検索候補のドロップダウンがあります。

何か、文字を入力すると、入力した値が %LIKE% であるすべての結果が表示されます。

関数 keyup() を使用します。

    var search = $("#search"),
    result = $('ul.dropdown');
    search.keyup(function(){
        if (search.val() !== "") {
            load();
            $.post('search.php?do=search', {search : search.val()}, function(data){
                if (data == ""){
                    stop_load();
                } else {
                    result.html(data);  
                }
            });
                $.post('search.php?do=search&data', {data : search.val()}, function(msg){
                    stop_load();
                    $('#end_results').html(msg);
                }); /** actual search **/
        } else {
            $('#end_results').html('');
            result.html('');
        }
    });

そして、これのためのPHP:

    } else { // the info
        $search = htmlentities(trim($_POST['search']));
        $search_query = "'%$search%'";
        $get_search = $db->prepare("SELECT * FROM `kit_info` WHERE `kit_name` LIKE $search_query LIMIT 10");
        $get_search->execute();
        while ($row = $get_search->fetch(PDO::FETCH_ASSOC)){
            $return .= '<li onClick=\'$("#search").val("'.$row['kit_name'].'");$("ul.dropdown").html("");search();\'>'.$row['kit_name'].'</li>';
        }
        echo $return;
    }

ご覧のとおり、PHP はドロップダウンの候補に表示されるリストをエコーし​​ます。

問題

ユーザーが 5 分ほど検索するとき、新しい文字を入力するたびに、私のホストはその IP を自動的にブロックして、送信するリクエストが多すぎます

これは、クライアントがリクエストの制限を超えており、さらに 24 時間ブロックされるためです。

私が考えた解決策:

最初にページの読み込み時に mysql からすべてのデータを読み込み、次にアクションを実行します。

質問

制限を拡張する以外に、これに対するより良い & 簡単な解決策はありますか?

私のソリューションは素晴らしく、機能しますか? どうすればいいですか?

どうもありがとう!

4

2 に答える 2

0

これを試して;

http://jqueryui.com/autocomplete/

まったく同じ状況で私のためにうまくいきました!

于 2013-04-29T13:46:09.237 に答える