jQuery ajax php长轮询

我一直在尝试使此冗长的轮询脚本正常工作,但我一直陷于困境。这次我对服务器的ajax请求有问题。提供数据的php脚本(使用循环和睡眠来运行长轮询)工作得很好,但是我的jQuery脚本却不能。 到目前为止,我已经尝试对脚本使用普通的
$.ajax()
请求和
$.post()
请求,但是当我这样做时,整个脚本将停顿。好吧,脚本实际上按照预期的方式加载,但是页面显示它一直在加载(使用谷歌浏览器,它在屏幕底部显示了“ 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的热门评论,导致“忙碌的游标”保留下来-看来它是特定于Google Chrome的,您需要等待所有内容加载后才能进行Ajax调用。 编辑:只是一个建议-老兄,我错了:您不应该使用GET请求在您的网站上进行任何庞大/敏感的操作,因为它可能导致您的网站容易受到攻击。拥有/入侵某些高负载网站的任何人都可以在其页面上插入一个不可见的iframe,以便访问该页面的任何用户都将发出该GET请求,甚至没有意识到它-它可能导致服务器崩溃/损坏(成千上万的请求进入您的服务器服务器)。大多数现代浏览器不会允许跨站点POST请求,因此应该是安全的。 编辑2:关于您的站点即使该脚本中止后仍无法运行,但该站点仍然不可用:这很可能是由于会话所致。标准会话行为将只允许一个具有相同会话的php实例同时运行-所有其他请求将等待,直到在所有其他脚本中该会话关闭为止。您应该以脚本尽快关闭会话,使用自定义会话处理将启用具有相同会话的多个请求(很可能会很丑陋),或者检测到用户中止以在用户在浏览器中中止该代码段时立即将其关闭。     

要回复问题请先登录注册