我试图在我的网站顶部创建一个搜索栏,该搜索栏将通过严格度较低的表格进行搜索。基本上,用户键入与以下三列之一相对应的关键字,他们将发送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个字符。