我试图在我的网站顶部创建一个搜索栏,该搜索栏将通过严格度较低的表格进行搜索。基本上,用户键入与以下三列之一相对应的关键字,他们将发送AJAX请求,并且指向相应页面的链接将在我的div中弹出。



由于某种原因,无论我如何尝试,都无法显示“ 5gooper”条目。当我搜索“ a”或“ aa”时,其他两个出现但没有字母组合会返回5gooper条目。这是我的代码:

的PHP

$searchquery = $_POST['searchquery'];
$searchquery2 =  "%$searchquery%";

$query = "SELECT * FROM data WHERE
                        name LIKE '$searchquery2'
                        OR author LIKE '$searchquery2'
                        OR project LIKE '$searchquery2'
                        OR protocol LIKE '$searchquery2'
                        ORDER BY DATE DESC LIMIT 20";


AJAX

$('#sbar').keyup(function(){

    var query = $(this).val();

    $.ajax
        ({
    url: "autocomplete.php",
    data: {searchquery: query},
    type: 'POST',
    success: function(data){
        $('#acd').html(data); //acd stands for auto complete div
                            }
        });

});


关于为什么搜索无法完全正常的任何想法?即使在'%'的侧面,无论我键入什么,它都不会找到gooper条目。

谢谢

最佳答案

这就是我要做的:

$('#search-input input[type=text]').on('keyup', function(){

    var input = $('#search-input input[type=text]').val();
    var $name = $.trim(input);

    if($name.length > 3 && $name.length < 25) {

        delay(function() {

            var url = encodeURI("search/" + $name);

            $.ajax({

                url: url,
                type: "get",
                dataType: 'json',
                success: function(data) {

                   console.log(data);

                }

            });

        }, 500);

    }

});


和我的延迟功能

var delay = (function() {
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();


这是针对GET的,可以轻松更改为POST。它每500毫秒执行一次ajax调用,从而具有垃圾邮件保护功能,并且可以将字符范围调整为在x个字符之后才能使用,但不能超过x个字符。

09-07 23:38