我只是创建一个带有搜索功能的网页,在每次搜索中我都有一个带回建议的数据库查询。但是,当我解雇这个onkeyup fucntion太多次(我的意思是10-20次),因为它在尝试时一次又一次地被解雇,经过太多的解雇网站崩溃并给我一个错误页面,标准谷歌杂项错误页面(不是PHP错误页面解释什么是错的)1分钟后,一切正常。你有什么想法吗?
谢谢。
这是我的JS代码
var timer;
$('#search').keyup(function(e){
timer = setTimeout(function(){
var searchname = $('#search').val();
$.ajax({
url:"php/fetchsuggest.php",
type:'POST',
data:{searchname:searchname},
success: function(data){
$('#fetch').show();
$('#fetch').html(data);
//select fetch as val
$('.fetched').click(function(){
var innerval=$(this).text();
$('#search').val(innerval);
$('#fetch').hide();
$('#search').focus();
});
}
});
},300);
});
答案 0 :(得分:0)
@apokryfos在他的评论中是完全正确的。
您的onkeyup
事件处理程序以某种方式启动MySQL查询:可能是通过用户浏览器到您的php页面的ajax样式请求。然后,在MyQL查询有机会完成并将其结果集返回给浏览器之前,下一个事件处理程序将启动另一个查询。
一旦MySQL查询开始(在通常的php实现中),它就会运行完成。即使用户在查询正在进行时关闭浏览器到php连接,也是如此。如果您的用户能够快速启动许多查询 - 通过快速键入 - 这些查询将堆积在MySQL服务器中,直到资源耗尽为止。
这里可能存在恶性循环。用户认为“也许我的请求没有通过”并再次点击,开始另一个请求。
jQueryUI自动完成小部件有一个delay
参数来控制请求发送的频率。 http://api.jqueryui.com/autocomplete/#option-delay根据我的经验,一到两秒的设置可以产生高质量的用户体验。您可能会发现使用这样的小部件很有帮助;其他人已经调试了用于延迟的javascript超时的复杂性。