jQuery ajax php长轮询

我一直试图让这个长的轮询脚本工作,但我一直卡住了。 这次我遇到了对服务器的ajax请求的问题。 提供数据的php脚本(使用循环和hibernate运行长轮询)完全正常,但我的jQuery脚本却没有。

到目前为止,我已尝试使用普通的$.ajax()请求和$.post()请求,但是当我这样做时,整个脚本都会停止。 好吧,脚本实际上加载了它应该,但页面显示它继续加载(使用谷歌浏览器它显示屏幕底部的“等待”栏)。 在PHP脚本中60秒超时后,jQuery脚本收到“false”,因为没有找到数据。 然后该脚本应该询问数据agian。

我的问题是:如何避免浏览器显示它在后台加载某些东西? 我的服务器是一个共享服务器,所以我在服务器本身安装东西时没有访问权限所以这只需要使用javascript(jQuery)和php来解决。

编辑:刚刚在Internet Explorer中检查了我的脚本,它似乎没有显示脚本正在加载的任何迹象,但它仍然是谷歌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()-$timeclass = $class["id"]; $this->orderBy("timestamp"); $this->_extraConditions = "`timestamp`>'$lastTime' AND "; $result = $this->search(); if($result) return $result; usleep(250000); clearstatcache(); } 

使用firebug(使用谷歌浏览器)时,它只显示已发出请求,但未在控制台的GET字符串末尾显示通常的加载图标。 在Firefox中,它还只显示一个请求处于挂起状态(显示加载图标),但至少浏览器不像页面正在加载一样。

谢谢…

我认为您应该在页面加载时阅读有关Chrome AJAX的热门评论, 导致“忙碌光标”保持不变 – 它似乎是Google Chrome特定的,您需要等待所有内容加载后再进行ajax调用。

编辑:只是一个建议 – maby我错了:您不应该使用GET请求在您的网站上进行任何大型/敏感操作,因为它可能导致您的网站轻松攻击。 拥有/攻击某些高负载网站的任何人都可以在其网页上插入一个不可见的iframe,以便访问该网页的任何用户都可以在没有意识到的情况下发出该GET请求 – 它可能会崩溃/损害您的服务器(因为有数千个请求来到您的网站)服务器)。 大多数现代浏览器不会允许跨站点POST请求,因此它应该是安全的。

编辑2:关于你的网站是不可用的,而该脚本即使你中止它仍然工作:它很可能是因为会话。 标准会话行为将只允许一个具有相同会话的php实例同时运行 – 所有其他请求将等待,直到该会话在所有其他脚本中关闭。 您应该在脚本中尽快关闭会话 ,使用自定义会话处理,这将启用具有相同会话的多个请求(很可能这将非常难看)或检测用户中止以在用户在浏览器中中止它时立即关闭sript。