我一直试图让这个长轮询脚本的工作,但我一直卡住。这一次,我对服务器的ajax请求有问题。提供数据的php脚本(使用循环和睡眠运行长轮询)工作得很好,但我的jQuery脚本没有。jQuery的AJAX PHP长轮询
到目前为止,我已经尝试使用正常的$.ajax()
请求和$.post()
请求到脚本,但是当我这样做时整个脚本停顿。好剧本实际上载入像它应该,但页面显示,它会持续(使用谷歌Chrome浏览器则显示“等待”在屏幕的底部栏)。在PHP脚本中60秒超时后,jQuery脚本收到“false”,因为没有找到数据。那么脚本应该要求提供数据。
我的问题是:我该如何避免这表明它加载的东西在后台浏览器?我的服务器是一个共享的服务器,所以我没有访问,当谈到服务器本身上安装的东西,所以这必须使用只有JavaScript(jQuery的)和PHP来解决。
编辑:刚才检查我的脚本出在Internet Explorer中,它似乎并没有展示任何迹象表明脚本加载,但它仍然在谷歌浏览
编辑问题发布一些代码:
这是我的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();
}
当使用萤火虫(谷歌浏览器),那只能说明一个请求已被提出,但没有显示在GET字符串的结尾通常加载图标在控制台。在Firefox中,它也只是表明一个请求正在挂起(显示加载图标),但至少浏览器不会像加载页面那样操作。
谢谢...
你使用Firefox和萤火虫吗?这将有助于告诉你发生了什么事。你可以发布一些代码吗? – Brad
刚刚编辑原始帖子,以便它包含源代码和使用Firebug的结果的简短说明 – Simon
我现在已经开始工作了。如果我设置一个超时来调用lpStart()函数,在加载DOM后两秒,Google Chrome将不会显示加载栏,但是这带来了一个新问题。每当我停止请求(即通过单击一个链接),错误事件就会被触发,并且我收到一条警告,告诉我“出错了”(就像它应该的那样)。在此之后,该网站将不会加载,直到请求缩短时间已到达。这只会发生,如果我在同一浏览器(同一会话) - 而不是当我的电脑出现错误,然后加载页面上我iPad ... – Simon