2010-08-31 4 views
1

J'expérimente sur ce code que j'ai obtenu du filet (j'essaye de faire une conversation simple mais je fais l'insertion de message manuellement dans la base de données mysql). Il actualise la page toutes les 3 secondes et affiche le nouveau message dans la page récupérée de la base de données. Cela fonctionne bien en chrome et firefox mais pas en IE. Ce que j'ai observé dans IE est qu'il affichera seulement le nouveau message chaque fois que j'efface le cache ou efface les cookies dans le navigateur. Quelqu'un peut-il me aider à trouver une solution pour cette s'il vous plaît ...Ajax simple/actualisation de page

S'il vous plaît voir le code:

<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> 

c'est le code pour 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']; 
    } 
} 
?> 

S'il vous plaît aider ... merci ..

Répondre

1

Cela ressemble à un problème de mise en cache. Vous devriez essayer d'ajouter un nombre aléatoire à votre URL. Cela forcera IE à recharger la page.

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

Je sais que cela ne vous aidera pas en ce moment, à la première fois, mais je vous recommande fortement d'utiliser une bibliothèque JS comme jQuery. Il rend les appels ajax beaucoup plus simples et cross-browser. Cela rendra votre code plus clair, et vous serez en mesure de vous concentrer sur votre logique au lieu de problèmes de navigateur de bas niveau.

+0

comment monsieur .......? – yonan2236

+0

jQuery est une bibliothèque JavaScript très utile. Un appel AJAX GET est fait simplement comme ceci: $ .get (URL, function() { // Votre code pour gérer la réponse du serveur }); Peut-être que votre problème de compatibilité du navigateur peut être résolu en utilisant jQuery (OK, vous pouvez également le réparer vous-même, mais vraiment ... jQuery en vaut la peine). – PJP

3

Votre meilleur pari est d'ajouter les en-têtes suivants en haut de votre page qui est de retourner le contenu que vous souhaitez ne pas être mis en cache

header('Last-Modified: Mon, 01 Jan 1970 05:00:00 GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Pragma: no-cache'); 

Cela vous permettra de contrôler le cache du côté serveur plutôt que d'ajouter le hack "aléatoire" à la fin de la requête.

+0

ok ... donc je dois juste copier votre code fourni à ma première page? – yonan2236

+0

essayez de l'ajouter dans votre try.php, juste après la fonction require_once. – Tanerax

+0

ok merci beaucoup .... – yonan2236

0

Si vous voulez faire des choses AJAX et le faire fonctionner dans plusieurs navigateurs, je recommande de jeter un oeil à jQuery:

jQuery Home Page

Il est relativement facile de démarrer et il vous fera beaucoup plus productif.

En particulier, un coup d'oeil à jQuery.ajax():

jQuery.ajax()

Vous éprouverez probablement d'abord le même problème avec IE lors de l'utilisation de jQuery, mais je pense que vous pouvez le corriger en réglant la cache paramètre à false (comme décrit sur la page I lien vers ci-dessus).