我正在编写一个非常简单的聊天应用程序。我编写了一个代码,可以在不刷新页面的情况下在数据库中插入数据。但是当我同时与两个用户进行测试时,我只能在发送新消息时看到其他用户发送给我的内容。如何让它更生动?我花了一整天的时间阅读Websockets(特别是 socket.io,棘轮(和长轮询。我在这里找到了有趣的解决方案,但我希望用我已经编写的代码来实现它,这让我感到困惑。我正在使用 php while 语句从数据库中获取数据。
工作 Ajax 代码
<script>
$(document).ready(function(){
$("#buttons").click(function(){
var fromuserid = $("#fromUserId").val();
var touserid = $("#toUserId").val();
var chatMessage = $("#chatMessage").val();
// stored in database.
var dataString = 'fromUserId='+ fromuserid + '&toUserId='+ touserid + '&chatMessage='+ chatMessage;
// AJAX
$.ajax({
type: "POST",
url: "chat.php",
data: dataString,
cache: true,
success: function(response){
$("#displayMessage").html(response);
$("#chatForm").trigger("reset");
}
});
return false;
});
});
</script>
而声明
<div id='displayMessage' style='height: 480px; padding:5%; overflow-x:hidden;'>
<?php
$chatmsgQ="SELECT * FROM ve_chat c
WHERE c.isActive='1' AND (c.fromUserId='$loginid_session'
OR c.toUserId='$loginid_session')";
$chatmsgresult= mysqli_query($db,$chatmsgQ);
while($chatmsg= mysqli_fetch_array($chatmsgresult)){?>
<?php if($chatmsg['fromUserId']==$loginid_session):?>
<!-- user one -->
<p class='bubble pull-left'><?=$chatmsg['message'];?></p>
<?php elseif($chatmsg['fromUserId']!=$loginid_session):?>
<!-- user two-->
<p class='bubbleother pull-right'><?=$chatmsg['message'];?></p>
<?php endif;?>
<?php } ;?>
</div>
在推送消息方面,PHP 并不是最好的语言,它实际上是围绕典型的获取/响应流构建的。
http://www.nodejs.org 和 http://socket.io/hey 非常容易设置,并且可以很好地与您在大部分工作中使用 php 一起使用,然后使用 node 来处理推送消息之类的东西。
为了使您的应用程序更加生动,您需要使用 setInterval
方法。使用这个项目简单的php,ajax和mysql聊天应用程序。