我已经在这里发布了一个类似的问题,但没有得到可以解决我的问题的回复,而且问题也发生了一些变化,所以我重新发布并迫切希望获得一些帮助!
链接到上一个问题:
当前代码:
JS(我从 php 运行它):
$oldIDq = mysql_query("SELECT * FROM messages ORDER BY id DESC LIMIT 1");
while($oldrow = mysql_fetch_array($oldIDq)){
$oldID = $oldrow['id'];
}
$func = '
var oldID = '.$oldID.';
function wait() {
$.ajax({
type: "GET",
url: "../scripts/msg_scripts/msg.php?oldid=" + oldID,
async: true,
cache: false,
success: function (data){
if(data != \'1\'){
var json = eval(\'(\' + data + \')\');
if (json[\'msg_content\'] != "") {
alert("new meassage added");
}
oldID = json[\'oldID\'];
setTimeout(\'wait()\',1000); }
},
disconnect: function()
{
return false;
setTimeout(\'wait()\',1000);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("error: " + textStatus + "(" + errorThrown + ")");
setTimeout(\'wait()\',1000);
}
});
}
$(document).ready(function(){
wait();
});
';
服务器:
$connect = mysql_connect ("localhost", "root", "")
or die ("couldnt connect");
mysql_select_db ("***") or die ("not found"); //if db was not found die
mysql_query("SET NAMES 'utf8'");
$oldID = $_GET['oldid'];
if($oldID == "") {
die('timeout');
}
else{
$result = mysql_query("SELECT id FROM messages ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
$last_msg_id = $row['id'];
}
while($last_msg_id <= $oldID)
{
usleep(10000);
clearstatcache();
$result = mysql_query("SELECT id FROM messages ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
$last_msg_id = $row['id'];
}
}
$response = array();
$response['msg_content'] = 'new';
$response['oldID'] = $last_msg_id;
echo json_encode($response);
}
现在,我在进程的服务器端运行了一个会话,我暂时将其删除,因为我知道长轮询对会话有问题我也有会话在发送 ajax 请求的页面上运行,因为我删除了会话我的问题在某种程度上有所改善,现在发生的情况是我基本上可以点击我网站上的链接并退出页面并出现错误,但如果我这样做超过 4-5 次,浏览器会冻结每次点击在任何链接上只是重新运行 ajax 函数,我得到一个不同的错误。如果我刷新请求的页面,我会立即收到第二个错误并且浏览器冻结。如果这是有用的信息,如果我关闭浏览器并尝试重新打开我网站的任何页面,除非我重新运行我的服务器(现在在本地主机上工作),否则它根本不会加载,也用 chrome 和 ff 尝试过。
有人可以指出我的解决方案吗?