所以我对php有点陌生,我正在尝试编写一个php实时聊天web应用程序。。。它将聊天数据存储在mysql数据库中。然后,我每隔几秒钟调用我在下面键入的UpdateDb()函数,刷新它在我有php代码的div中显示的聊天内容。。。但每次它调用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) 您向服务器发出Ajax请求,只获得比某些message_date
更新的JSON消息输出。然后为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>