我正在構建一個聊天應用程序並遇到一些問題。首先我要的聊天開始從數據庫中,一旦用戶登錄加載從Ajax聊天中獲取上次插入的消息
功能,從DB獲得了整個聊天這是由AJAX
function getChatData(){
global $mysqli;
//echo $lastinseted= $mysqli->insert_id();
$sql = "SELECT `chat`.`message`,
`users`. `username`,
`chat`.`timestamp`
from `chat` JOIN `users` ON (`chat`.`user_id`=`users`.`user_id`)
ORDER BY `chat`.`timestamp` DESC limit 15";
try{
if($stmt=$mysqli->prepare($sql)){
echo returnJson($stmt);
$stmt->close();
$mysqli->close();
}else{
throw new Exception("An error occured while fetching record data");
}
}catch(Exception $e){
log_error($e, $sql, null);
echo 'fail';
}
}
這裏所說的是回調函數:
function getChatCallback(data){
var h='';
for(var i=0, l=data.length;i<l;i++){
h+=data[i].username+' says: '+data[i].message+'<span style="color:gray"> at the time '+data[i].timestamp+'</span><br/>';
}
$('.messages').html(h);
setTimeout(getChat,1500);
}
這是將插入新的消息,一旦用戶點擊進入,它是由Ajax調用也被稱爲被稱爲數據庫中的函數:
function putChatData($message,$room,$user_id){
global $mysqli;
$sql = "INSERT INTO `chat`
(`message`,`timestamp`,`room`,`user_id`)
VALUES (?,?,?,?)";
$timestamp = gmdate("Y-m-d H:i:s");
try{
if($stmt=$mysqli->prepare($sql)){
$stmt->bind_param('ssii',$message,$timestamp,$room,$user_id);
$stmt->execute();
$stmt->close();
$mysqli->close();
}else{
throw new Exception("An error occured while fetching record data");
}
}catch(Exception $e){
log_error($e, $sql, null);
echo 'fail';
}
}
現在的問題是,我可以插入新的信息到數據庫,但第一個函數獲取聊天,帶給所有的聊天,包括在用戶登錄之前舊的。我嘗試使用時間戳或最後插入ID,但沒有與我一起工作。
我認爲沒有犯罪,如果用戶得到一塊先前對話和了解的主題。它是如此糟糕? – heximal
新的消息中插入後,你需要調用getChatData()函數更新的消息.. –
heximal,我只是想在新的用戶開始觀看聊天,他英寸Parasath日誌的時間,即getChatData每兩秒調用,所以當插入的新消息應該馬上顯示出來,這就是現在正在發生的事情。謝謝 – Timmy