实时更新程序聊天脚本

时间:2014-10-20 09:30:51

标签: javascript php html ajax

所以我是php的新手,我正在尝试编写一个php实时聊天Web应用程序......它将聊天数据存储在mysql数据库中。然后我调用我每隔几秒钟输入的UpdateDb()函数来刷新它在div中显示的聊天内容我有php代码。(聊天数据是从该div中的mysql表中回显的)...但是每次调用UpdateDb()函数时,如果你有文本输入,你将消息键入焦点(选中),它会模糊它,你永远不能输入消息,因为它一直取消选择它。 :( ...有没有人有更好的代码来更新某个div中的内容?我真的很感激任何人都可以提供帮助...(请记住,我不是专业人士在PHP,我不太了解javascript)。如果我需要发布整个文档代码,我可以,如果你不知道我的意思...我真的想做如果可以的话,我会在php中完成整个过程,但我不知道是否有办法。

function UpdateDb()
{
    if (window.XMLHttpRequest){           // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();}else{     // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function()  
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("messages").innerHTML=xmlhttp.responseText;
    }
}

xmlhttp.open("GET","chat2.php",true);xmlhttp.send();
}

1 个答案:

答案 0 :(得分:0)

您可以采取以下两种方法:

1)您对服务器执行Ajax请求以仅获取消息的JSON输出,比某些message_date更新。比你为那个JSON数据创建HTML包装并附加到消息列表(抱歉,我使用jQuery):

$.ajax({
   url: 'ajax/getMessages',
   type: 'post',
   data: {last: $("#lastMessageDate").val()},
   success: function (newMessages) { // newMessages contains JSON of messages
      $.each(newMessages, function(key, message){
         $("#messages").append("<div class='message'>" + message.content + "</div>");
      }); 
   }
});

<div id="messages">
   <div class="message">
       <?php echo $message['content']; ?>
   </div>
   <input type="hidden" value="2014-10-20 12:52" id="lastMessageDate"/>
</div>
<textarea></textarea>

2)使用相同的视图,只需重新加载单个元素。 (再次jQuery)

$("#messages").load(window.location.href + " #messages > *");

<div class="messages">
   <?php foreach ($dbMessages as $message) { ?>
       <div class="message"><?php echo $message['content']; ?></div>
   <?php } ?>
</div>
<textarea></textarea>