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

标签 php mysql ajax search dynamic

我只是创建了一个具有搜索功能的网页,在每次搜索中我都有一个数据库查询,可以返回建议。但是当我触发这个 onkeyup 函数太多次(我的意思是 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);
    });

最佳答案

@apokryfos 的评论完全正确。

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

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

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

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

关于PHP搜索功能让我的网站崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44995583/

相关文章:

php - 不能将 openssl 扩展用于 SSL/TLS 保护

php - 如何在多语言json中执行相似搜索?

javascript - 将文件从 Apache 提供给 Javascript

php - 如何在 php 中为数据库中选定的表创建 sql 日志?

javascript - 使用ajax在悬停时调用一个php变量

javascript - php显示空数组但ajax显示数据

javascript - 如何使用 PHP 设置任何 jQuery 图表数据

php - 从 SQL 数据库中选择随机行并存储以供在另一个页面上重复使用

Azure 上的 PHP 应用程序为 "Console App"

mysqldump wampee 失败