2010-08-31 96 views
1

我正在试验这个代码,我从网上(我试图做一个简单的聊天,但我手动在mysql数据库中的消息插入)。它每3秒刷新一次页面,并在从数据库中提取的页面中显示新消息。它在Chrome和Firefox中运行良好,但它不在IE中。我在IE中观察到的情况是,每次我清除缓存或删除浏览器中的cookie时,它只会显示新消息。谁能帮我设计一个解决方案,这个请...简单的Ajax /页面刷新

请参阅代码:

<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']; 
    } 
} 
?> 

请帮助...感谢.. 。

回答

1

它看起来像一个缓存问题。您应该尝试在您的网址中添加随机数字。这将迫使IE重新加载页面。

xmlhttp.open("GET","http://localhost/review/login/5/try.php?r=" + Math.random(),true); 
0

我知道这不会帮助你,现在,在第一时间,但我强烈建议你使用JS库像jQuery。它使ajax调用更简单,并且跨浏览器。它会使你的代码更加清晰,并且你将能够专注于你的逻辑而不是低级别的浏览器问题。

+0

先生.......? – yonan2236 2010-08-31 13:12:36

+0

jQuery是一个非常有用的JavaScript库。 ajax GET调用简单如下: $ .get(URL,function(){ //您的代码来处理服务器响应 }); 也许你的浏览器兼容性问题可以通过使用jQuery来解决(好吧,你也可以自己修复它,但真的... jQuery是值得的)。 – PJP 2010-08-31 14:29:33

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'); 

这将允许您控制在服务器端缓存而不是在请求结尾添加“随机”数字破解。

+0

好的...所以我只需要将您提供的代码复制到我的第一页上? – yonan2236 2010-08-31 13:22:59

+0

尝试将它添加到您的try.php中,紧跟在require_once函数之后。 – Tanerax 2010-08-31 13:25:10

+0

好的非常感谢你.... – yonan2236 2010-08-31 15:00:02

0

如果你想要做的AJAX的东西,有它在多种浏览器,我建议在jQuery的考虑看看:

jQuery Home Page

这是相当容易上手,它将使你更高效。

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

jQuery.ajax()

使用jQuery时,你可能会开始遇到IE浏览器相同的问题,但我认为你可以通过设置修复cache参数为false(如我在上面链接的页面所述)。