编程语言
首页 > 编程语言> > jQuery Ajax PHP长轮询

jQuery Ajax PHP长轮询

作者:互联网

我一直在尝试让这个冗长的轮询脚本正常工作,但我一直陷于困境.这次,我对服务器的ajax请求有问题.提供数据的php脚本(使用循环和睡眠来运行长轮询)工作得很好,但是我的jQuery脚本却不能.

到目前为止,我已经尝试对脚本使用普通的$.ajax()请求和$.post()请求,但是当我这样做时,整个脚本就会停滞.好吧,脚本实际上按照预期的方式加载,但是页面显示它一直在加载(使用google chrome,它在屏幕底部显示了“ waiting for”栏). php脚本中的60秒超时后,jQuery脚本收到“ false”,因为未找到数据.然后,该脚本应要求提供数据agian.

我的问题是:如何避免浏览器显示它正在后台加载内容?我的服务器是一台共享服务器,因此在服务器本身上安装东西时我没有访问权限,因此只能使用javascript(jQuery)和php来解决.

编辑:刚刚检查了我的脚本在Internet Explorer中,它似乎没有显示任何迹象表明该脚本正在加载,但在Google Chrome中仍然是一个问题

编辑发布一些代码:

这是我的JavaScript文件:

if($("#interestboard"))
{
    var lasttime = $("#lasttime").val();
    var pollurl = $("#pollurl").val();
    lpStart();
}
function lpStart()
{
    $.ajax({
        type: "GET",
        url: pollurl+lasttime,
        async: true,
        cache: false,
        success:function(data)
        {
            alert(data);
        },
        error: function()
        {
            alert("Something went wrong");
        }
    });
}

当然,这包装在$(document).ready()中

我的php脚本如下所示:

while(time()-$time<60)
    {
        $this->class = $class["id"];
        $this->orderBy("timestamp");
        $this->_extraConditions = "`timestamp`>'$lastTime' AND ";
        $result = $this->search();
        if($result)
            return $result;
        usleep(250000);
        clearstatcache();
    }

当使用Firebug(与Google Chrome浏览器一起使用)时,它仅显示已发出请求,但未在控制台中GET字符串的末尾显示通常的加载图标.在Firefox中,它也仅显示请求正在等待处理(显示正在加载图标),但至少浏览器不会像页面正在加载那样工作.

谢谢…

解决方法:

我认为您应该阅读有关Chrome AJAX on page-load causes “busy cursor” to remain的最高评论-似乎它是特定于Google Chrome的,您需要等待所有内容加载后才能进行Ajax调用.

编辑:只是一个建议-马比,我错了:您不应该使用GET请求在您的网站上进行任何庞大/敏感的操作,因为它可能导致您的网站容易受到攻击.拥有/入侵某些高负载网站的任何人都可以在页面上插入一个不可见的iframe,这样,访问该页面的任何用户都将发出该GET请求,甚至没有意识到它-它可能导致服务器崩溃/损坏(成千上万的请求进入您的服务器服务器).大多数现代浏览器不会允许跨站点POST请求,因此应该是安全的.

编辑2:关于您的站点即使该脚本中止后仍无法正常工作的情况下仍然不可用:这很可能是由于会话所致.标准会话行为将只允许一个具有相同会话的php实例在同一时间运行-所有其他请求将等待,直到在所有其他脚本中该会话关闭为止.您应该在脚本中尽快close the session,使用自定义会话处理功能来启用具有相同会话的多个请求(很可能会很丑陋),或者一旦用户在浏览器中中止该代码便要关闭detect user abort.

标签:server-push,php,jquery,long-polling
来源: https://codeday.me/bug/20191208/2090090.html