我正在使用ajax,php,javascript和mysql製作一個簡單的網絡聊天應用程序。 我在這裏要做的是避免在1秒的時間間隔(通常在基本聊天應用程序中完成)獲取整個數據庫,而是想要獲取並顯示(通過附加)也是新近的聊天記錄由任何用戶輸入到數據庫中。這段jQuery Ajax代碼是否正確?
爲了實現這個功能,首先當用戶第一次打開聊天窗口時,整個數據庫被加載到聊天窗口中(此代碼片段中未顯示),然後我使用變量msgid來獲取MSg_ID的最新值(這是我的聊天表中的自動遞增主鍵)通過ajax請求到頁面'Msg.php',該頁面返回所需的msg_id值。
現在使用此值的msgid並通過對頁面'Chat3.php'的ajax請求將其與數據庫中每秒鐘的Msg_ID的最大值進行比較。 如果Msg_ID的最大值已更改,則返回所需的行。在此之後,我使用與頁面'Msg.php'相同的較早的ajax請求更新'msgid'的值。我已經徹底測試了它們,Msg.php和Chat3.php頁面正常工作。
我的問題在這裏是我的代碼是什麼問題,爲什麼不工作? 我們可以在ajax回調函數中使用ajax請求嗎? 還有什麼可能是錯誤的可能來源? 任何輸入將是有價值的:) 如果您在理解代碼時有任何問題,請發表評論。 '#yyy'和'#zzz'是我用來測試ajax回調函數的數據值的隨機div元素。
我甚至可以發佈其他代碼,如果有幫助。
<script type"text/javascript">
$(document).ready(function() {
var dept = '<?php echo $deptId; ?>';
$.ajax({
url: 'scripts/php/Msg.php',
data: {dept:dept},
success: function(data) {
$('#yyy').html(data);//this displays the correct value
var msgid=data;
}
});
var interval = setInterval(function() {
$.ajax({
url: 'scripts/php/Chat3.php',
data: {dept:dept,msgid:msgid},
success: function(data) {
if(data!='bad'){
//$('#messages').prepend(data);
$('#zzz').html(data);//does not display any value although Chat3.php is returning the correct value.
//below ajax request to update the value of msgid
$.ajax({
url: 'scripts/php/Msg.php',
data: {dept:dept},
success: function(data) {
var msgid=data;
$('#zzz').html(data); //not displaying anything although above one is was displaying
}
});
}
}
});
}, 1000);
});
</script>
這裏是我的Msg.php
<?php
require '../../includes/database/connect.db.php';
function get_msg($dept){
$query= "SELECT Msg_ID,Sender, Message ,Time_stamp FROM chat WHERE Dept_ID='$dept' ORDER BY Msg_ID DESC" ;
$run=mysql_query($query);
$messages =array();
while($message=mysql_fetch_assoc($run)){
$messages[] =array('msgid'=>$message['Msg_ID'],
'sender'=>$message['Sender'],
'message'=>$message['Message'],
'time_stamp'=>$message['Time_stamp']);
}
return $messages;
}
$dept=$_GET['dept'];
$messages = get_msg($dept);
$x=count($messages);
if($x){
foreach($messages as $message) {
if($x==count($messages)){
echo $message['msgid'];
}
$x--;
}
}
?>
這裏是我的Chat3.php
<?php
require '../../includes/database/connect.db.php';
function get_msg($dept,$msgid){
$query1= "SELECT MAX(Msg_ID) as msg_id FROM chat" ;
$run1=mysql_query($query1);
$row = mysql_fetch_assoc($run1);
$result =$row['msg_id'];
$messages =array();
if($result>$msgid)
{
$query= "SELECT Sender, Message ,Time_stamp FROM chat WHERE Dept_ID='$dept' AND Msg_ID>'$msgid' ORDER BY Msg_ID DESC" ;
$run=mysql_query($query);
while($message=mysql_fetch_assoc($run)){
$messages[] =array('sender'=>$message['Sender'],
'message'=>$message['Message'],
'time_stamp'=>$message['Time_stamp']);
}
return $messages;
}
else
{
return $messages;
}
}
$dept=$_GET['dept'];
$msgid=$_GET['msgid'];
$messages = get_msg($dept,$msgid);
if(count($messages)){
foreach($messages as $message) {
echo '<strong>'.$message['sender'].' Sent</strong><br>';
echo $message['message'].' <i><small><div align="right">'.$message['time_stamp'].'</i></small></div>';
}
}
else {
echo 'bad';
}
?>
如果Msg.php和Chat3.php工作正常,其他錯誤是什麼你收到了嗎? – Abhinav
沒有錯誤產生,它只是在回調函數中顯示'data'元素,就好像它沒有收到它或什麼,並且我已經完全檢查了我的Msg.php和Chat3。php –
只是爲了通知,您所做的ajax請求類型是GET類型,因爲沒有其他聲明,所以如果您要獲取發佈數據,則必須在對象中設置類型:'POST'。 – Djip