我做了一个简单的聊天。它工作正常,但行为不符合预期。当用户提交一条消息时,应该显示该用户的姓名,时间和消息。
碰巧的是,用户名和响应首先出现,并且在稍有延迟(这是滞后)之后,似乎是在插入自己的时间。我不知道为什么,特别是因为响应是(或者至少似乎是)整体发送的,并且一旦从服务器发送响应,就不会插入任何内容...
这是聊天的链接。您可以输入虚拟用户名和虚拟消息。
以下是重要的代码段:
的PHP
while ($row = $result->fetch_assoc()) {
$time = date('g:ia', $row['time']);
echo "<p class=\"message\"><i>{$row['username']}</i> ($time): {$row['content']}</p>";
}
的JavaScript
ajax.onreadystatechange = function () {
if (ajax.status === 200 && ajax.readyState === 4) {
document.getElementById('messagesArea').innerHTML = ajax.responseText;
}
};
罪魁祸首是脚本的这一部分:
var content = document.getElementById('messageBox').value;
if ( content === '') {
return;
} else {
var ajax = new XMLHttpRequest();
var username = document.getElementById('signedin').innerHTML;
document.getElementById('messageBox').value = '';
ajax.open('POST', 'postmessage.php', true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function () {
if (ajax.status === 200 && ajax.readyState === 4) {
// if there are errors echoed from the PHP file
if (ajax.responseText != "") {
document.getElementById('mysqliError').innerHTML = ajax.responseText;
return;
}
document.getElementById('messagesArea').insertAdjacentHTML('beforeend', '<p class="message"><i>' + username + '</i>: ' + content + '</p>');
}
};
ajax.send('username=' + username + '&content=' + content);
}
注意这一行: document.getElementById('messagesArea').insertAdjacentHTML('beforeend', '<p class="message"><i>' + username + '</i>: ' + content + '</p>');
您将在没有时间的情况下将消息插入#messagesArea
。然后,在getRecentMessages
以后的版本中,将其设置为从确实有时间的情况下,从输出中获取整个聊天日志displaymessages.php
并#messagesArea
用输出的内容覆盖。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句