2012-09-11 111 views
0

即時通訊使用類似的腳本描述在這裏:long-polling info from mysql not working 在我的網站,它的工作,但是,當我刷新頁面或點擊不同的鏈接,我得到一個錯誤提醒+網站開始嚴重滯後,有人能告訴我這是什麼原因?ajax與mysql的長輪詢

我的代碼:

$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){ 
    var json = eval(\'(\' + data + \')\'); 

    if (json[\'msg_content\'] != "") { 
     alert("new meassage added"); 
    } 

    oldID = json[\'oldID\']; 
    setTimeout(\'wait()\',1000); 
    }, 

    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     alert("error: " + textStatus + "(" + errorThrown + ")"); 
     setTimeout(\'wait()\',15000); 
    } 

}); 
} 

$(document).ready(function(){ 

    wait(); 
}); 
'; 

服務器:

<?php 
    session_start(); 
    $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']; 
$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(1000); 
    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'] = 'new'; 
$response['oldID'] = $last_msg_id; 
echo json_encode($response); 
?> 
+0

@ moonwave99 - 我同意。 –

+0

aaaargh!幫幫我! eval ===邪惡使用JSON.parse(jsonString)instaid!而且你甚至不需要解析!如果你添加'dataType:'json''參數,jquery可以爲你做到這一點! – VDP

+0

謝謝你,我會試試:) – durian

回答

0

proplem在這裏$ _GET [ 'OLDID']當你點擊另一個鏈接或刷新頁面沒有它的變量$ OLDID將是空的,SQL將失敗。 和js函數保持調用自己沒有任何更改每次錯誤適應和ajax將繼續調用保持失敗這將導致無限循環,將掛起您的網站,我想如果你檢查它在螢火蟲你會看到發生的事情。

現在,如果你的意思是希望它有幫助

+0

和我能做些什麼來解決這個問題? – durian

+1

你可以檢查oldid是否爲null如果返回-1 並且在js中檢查如果responce = -1取消wait()調用 – AboQutiesh

+0

所以在服務器端:$ oldID = $ _GET ['oldid']; if($ oldID ==「」){$ oldID == -1}?和js? – durian