我正在试验我从网上获得的这段代码(我正在尝试进行简单的聊天,但我会在mysql数据库中手动插入消息)。它每3秒刷新一次页面,并在从数据库中获取的页面中显示新消息。它在chrome和firefox中运行良好,但在IE中却没有。我在IE中观察到的是,每次清除缓存或删除浏览器中的cookie时,它都只会显示新消息。任何人都可以帮我设计一个解决方案吗...
请参阅代码:
<html>
<head>
<script type="text/javascript">
function showResult(str) {
document.getElementById("livesearch").innerHTML="";
if (str.length==0) {
document.getElementById("livesearch").innerHTML="";
document.getElementById("livesearch").style.border="0px";
return;
}
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
var msxmlhttp = new Array(
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Msxml2.xmlHTTP
'Microsoft.XMLHTTP');
for (var i = 0; i <= msxmlhttp.length; i++) {
try {
xmlhttp = new ActiveXObject(msxmlhttp[i]);
}
catch (e) {
xmlhttp = null;
}
}
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
document.getElementById("livesearch").style.border="1px solid #A5ACB2";
setTimeout("showResult('a')", 3000);
}
}
xmlhttp.open("GET","http://localhost/review/login/5/try.php",true);
xmlhttp.send();
}
</script>
</head>
<body onload="">
<script>
setTimeout("showResult('a')", 3000);</script>
<form>
<div id="livesearch"></div>
</form>
</body>
</html>
这是try.php
<?php
require_once('config.php');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link)
{
die('Failed to connect to server: ' . mysql_error());
}
$db = mysql_select_db(DB_DATABASE);
if(!$db)
{
die("Unable to select database");
}
//Create query
$qry="SELECT * FROM message where message like '%".$_GET['a']."%'";
$result=mysql_query($qry);
if(mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_assoc($result))
{
echo $row['message']."<br>";
//echo "<br> ".$member['message'];
}
}
?>
请帮忙......谢谢......
答案 0 :(得分:3)
您最好的办法是在页面顶部添加以下标题,以便返回您不希望缓存的内容
header('Last-Modified: Mon, 01 Jan 1970 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
这将允许您控制服务器端的缓存,而不是在请求结束时添加“随机”数字hack。
答案 1 :(得分:1)
它看起来像是一个缓存问题。您应该尝试在网址中添加随机数。这将迫使IE重新加载页面。
xmlhttp.open("GET","http://localhost/review/login/5/try.php?r=" + Math.random(),true);
答案 2 :(得分:0)
我知道这在第一时间对你没有帮助,但我强烈建议你使用像jQuery这样的JS库。它使ajax调用更简单,并且跨浏览器。它将使您的代码更清晰,并且您将能够专注于您的逻辑而不是低级别的浏览器问题。
答案 3 :(得分:0)
如果你想做AJAX的东西,并让它在多个浏览器中工作,我建议你看一下jQuery:
入门相当容易,它会让你更多更高效。
特别是,看看jQuery.ajax():
使用jQuery时,您最初可能会遇到与IE相同的问题,但我认为您可以通过将cache
参数设置为false
来修复它(如我在上面链接的页面所述)