所以我是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();
}
答案 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>