【发布时间】:2015-09-21 00:12:07
【问题描述】:
我正在使用 ajax、php、javascript 和 mysql 制作一个简单的网络聊天应用程序。 我在这里要做的是避免在 1 秒的间隔后获取整个数据库(这通常在基本聊天应用程序中完成),而是我想获取和显示(通过附加)那些新输入的聊天由任何用户进入数据库。
为了实现这一点,首先当用户第一次打开聊天屏幕时,整个数据库被加载到聊天窗口中(这段代码sn-p中没有显示),然后我使用变量msgid来获取最新的值MSg_ID(这是我聊天表中的自动增量主键)通过 ajax 请求到页面“Msg.php”返回所需的 msg_id 值。
现在使用这个 msgid 的值,并通过对页面“Chat3.php”的 ajax 请求,将其与数据库中每秒 Msg_ID 的最大值进行比较。 如果 Msg_ID 的 Max 值已更改,则返回所需的行。在此之后,我将使用与页面“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 工作正常,您收到的其他错误是什么?
-
没有产生错误,只是在回调函数中显示'data'元素,好像它没有收到它什么的,我已经完全检查了我的Msg.php和Chat3 .php
-
请注意,您发出的 ajax 请求的类型是 GET 类型,因为没有声明任何其他内容,因此如果您要获取发布数据,则必须设置 type: ' POST' 在对象中。
-
我只使用获取数据
-
这个 javascript 是由 PHP 脚本生成然后回显到浏览器的吗?
标签: javascript php jquery mysql ajax