PHP搜索功能使我的网站崩溃

时间:2017-07-09 10:49:43

标签: php mysql ajax search dynamic

我只是创建一个带有搜索功能的网页,在每次搜索中我都有一个带回建议的数据库查询。但是,当我解雇这个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);
    });

1 个答案:

答案 0 :(得分:0)

@apokryfos在他的评论中是完全正确的。

您的onkeyup事件处理程序以某种方式启动MySQL查询:可能是通过用户浏览器到您的php页面的ajax样式请求。然后,在MyQL查询有机会完成并将其结果集返回给浏览器之前,下一个事件处理程序将启动另一个查询。

一旦MySQL查询开始(在通常的php实现中),它就会运行完成。即使用户在查询正在进行时关闭浏览器到php连接,也是如此。如果您的用户能够快速启动许多查询 - 通过快速键入 - 这些查询将堆积在MySQL服务器中,直到资源耗尽为止。

这里可能存在恶性循环。用户认为“也许我的请求没有通过”并再次点击,开始另一个请求。

jQueryUI自动完成小部件有一个delay参数来控制请求发送的频率。 http://api.jqueryui.com/autocomplete/#option-delay根据我的经验,一到两秒的设置可以产生高质量的用户体验。您可能会发现使用这样的小部件很有帮助;其他人已经调试了用于延迟的javascript超时的复杂性。