简单的Ajax /页面刷新

时间:2010-08-31 13:03:33

标签: ajax

我正在试验我从网上获得的这段代码(我正在尝试进行简单的聊天,但我会在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']; 
  }
 }
?>

请帮忙......谢谢......

4 个答案:

答案 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 Home Page

入门相当容易,它会让你更多更高效。

特别是,看看jQuery.ajax():

jQuery.ajax()

使用jQuery时,您最初可能会遇到与IE相同的问题,但我认为您可以通过将cache参数设置为false来修复它(如我在上面链接的页面所述)