我试图用PHP / MySql和AJAX创建一种聊天系统,但我在IE中运行脚本时遇到了困难。我在谷歌浏览器中进行了测试,效果很好。但是当我在IE中测试它时,应该每3秒从数据库获取所有消息的AJAX函数不能正常工作。它每隔3秒调用PHP脚本并将responseText放入div(显示每3秒发现的所有消息)。但是显示的消息总是一样的(直到我关闭页面并重新运行脚本)。此外,当新消息添加到数据库时,它不会显示。似乎responseText没有更新'。这些是我的脚本:
(AJAX)
function getMessages(messengerid, repeat)
{
var xmlhttp;
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;
document.getElementById("messages").scrollTop = document.getElementById("messages").scrollHeight;
}
}
xmlhttp.open("GET","modules/get_messages.php?key=abcIUETH85i236t246jerst3487Jh&id="+messengerid,true);
xmlhttp.send();
if(repeat) {
setTimeout("getMessages("+messengerid+", 1);", 3000);
}
}
(PHP / MySQL的)
<?php
$key = "abcIUETH85i236t246jerst3487Jh";
if( ($_GET['key'] == $key OR defined('IS_INTERNAL')) AND (int)$_GET['id'] > 0) {
include_once("../config.php");
include_once("../class/system.class.php");
$sys = new system($template_name);
if(!$sys->connect($db)) {
exit();
}
$messages = $sys->getEntries("messages", " WHERE messenger_id = '".(int)$_GET['id']."' ORDER BY id ASC ");
$messenger = $sys->getEntries("messengers", " WHERE id = '".(int)$_GET['id']."' LIMIT 1");
$user1 = $sys->getEntries("accounts", " WHERE id = '".$messenger[0]['account_id1']."' ");
$user2 = $sys->getEntries("accounts", " WHERE id = '".$messenger[0]['account_id2']."' ");
$displaynames[$user1[0]['id']] = $user1[0]['displayname'];
$displaynames[$user2[0]['id']] = $user2[0]['displayname'];
foreach($messages AS $key => $message) {
if(is_numeric($key)) {
?>
<div class="message">
<b><?=$displaynames[$message['account_id']];?> (<?=date("h:m:s", $message['timestamp']);?>) says:</b> <br />
<?=nl2br($message['message_content']);?>
</div>
<?php
}
}
}
?>
任何帮助将不胜感激! 提前谢谢。
最诚挚的问候, Skyfe。
答案 0 :(得分:0)
您的回复正在缓存中。解决此问题的一种方法是在请求网址中附加唯一参数,例如当前时间戳。
答案 1 :(得分:0)
它是IE的一个常见问题,它会缓存结果。在你的ajax调用中添加一些伪随机参数,例如当前时间戳
答案 2 :(得分:0)
我不知道php但是在jsp中你可以将以下代码添加到你的jsp页面
response.setHeader("Cache-Control","no-store, no-cache, must-revalidate");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);
我知道这篇文章很老了,我只是回复了未来的观众:D;)