我正在尝试构建聊天系统。问题是当一个用户将消息键入另一个用户时,聊天窗口将不会立即显示该消息给接收者。只有在接收器刷新窗口后,一切正常。这是我目前的代码:
profile.php
setInterval(function(){
var username="<?php echo $username; ?>";
$.ajax({
url:"s/shower.php",
type:"POST",
data:"shower=" + username,
success:function(data){
if (data == 1){
$(".pchat").show();
}
}
});
},500);
$(".chat_wind").click(function(){
var id=$(this).attr("id");
var newid=id.split("chat_wind");
var datid=newid[1];
$(".pchat").show();
});
$(".chatform").submit(function(){
var parent=$(this).attr("id");
var split=parent.split("chatform");
var newid=split[1];
var val=$("#chati").val();
if (val.length == 0){
return false;
}
$.ajax({
url:"s/log.php",
type:"post",
data:"newid=" + newid + "&txt=" + val,
success:function(data){
setInterval(function(){
$.ajax({
url:"s/chat.php",
type:"post",
data:"username=" + newid,
success:function(w){
var objDiv = document.getElementById("cbody");
objDiv.scrollTop = objDiv.scrollHeight;
$("#cbody").html(w);
}
});
},500);
}
});
$("#chati").val("");
return false;
});
chat.php
<?php
include "db.php";
include "timeago.php";
if (isset($_POST['username'])){
$username=$_POST['username'];
$dat='';
$sql=mysql_query("SELECT * FROM chat where uchated='$username' ORDER BY time asc");
while($row=mysql_fetch_array($sql)){
$time=$row['time'];
$txt=$row['text'];
$dat.="
<div id='msg'>
$txt <div id='ctime'></div>
</div>";
}
echo $dat;
}
?>
shower.php
<?php
include "db.php";
if (isset($_POST['shower'])){
$shower=$_POST['shower'];
$sqlara=mysql_query("SELECT * FROM chat where uchated='$shower'");
$numara=mysql_num_rows($sqlara);
if ($numara == 0){
echo "0";
}else{
echo "1";
}
}
?>
答案 0 :(得分:1)
您需要使用websockets来实现聊天系统。我不懂php。你可以尝试这个链接http://www.sanwebe.com/2013/05/chat-using-websocket-php-socket来理解websocket编程
答案 1 :(得分:0)
如果您真的需要,可以使用HTML5支持的WebSocket和Server-Sent Events。但是一开始长轮询就行了。然后,您可以了解聊天网站的要求和升级。