我已經在這裏發佈了一個類似的問題,但沒有得到一個答案,將解決我的問題,也問題已經改變了一點,所以我重新張貼並絕望得到一些幫助!ajax長輪詢在頁面刷新崩潰鏈接到另一頁
鏈接到前面的問題:
當前代碼:
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();
});
';
SERVER:
$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。
有人可以指點我的解決方案嗎?
它不會有一個問題,「會話」如果你只需用[session_write_close](http://php.net/manual/en/function.session-write-close.php)關閉寫入會話 – dbf
我已經做了它,但它沒有影響 – durian
抱歉地說,但那麼你做錯了 – dbf