Простое обновление Ajax / страницы - PullRequest
1 голос
/ 31 августа 2010

Я экспериментирую с этим кодом, который я получил из сети (я пытаюсь сделать простой чат, но я делаю вставку сообщения вручную в базе данных MySQL) Он обновляет страницу каждые 3 секунды и отображает новое сообщение на странице, извлеченной из базы данных. Он хорошо работает в Chrome и Firefox, но не в IE. Что я заметил в IE, так это то, что оно будет отображать новое сообщение только каждый раз, когда я очищаю кеш или удаляю куки в браузере. Может кто-нибудь помочь мне найти решение для этого, пожалуйста ...

Пожалуйста, смотрите код:

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

3 голосов
/ 31 августа 2010

Лучше всего добавить следующие заголовки в верхнюю часть вашей страницы, чтобы вернуть содержимое, которое вы не хотите кэшировать

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

Это позволит вам контролировать кэш на сервере.сторона, а не добавление взлома «случайного» числа в конце запроса.

1 голос
/ 31 августа 2010

Похоже на проблему с кешированием. Вы должны попробовать добавить случайное число в ваш URL. Это заставит IE перезагрузить страницу.

xmlhttp.open("GET","http://localhost/review/login/5/try.php?r=" + Math.random(),true);
0 голосов
/ 31 августа 2010

Если вы хотите использовать AJAX и работать в нескольких браузерах, я рекомендую взглянуть на jQuery:

Домашняя страница jQuery

Достаточно легко начать работу, и это сделает вас намного более продуктивным.

В частности, взгляните на jQuery.ajax ():

jQuery.ajax ()

Вероятно, первоначально вы столкнетесь с той же проблемой с IE при использовании jQuery, но я думаю, что вы можете исправить это, установив для параметра cache значение false (как описано на странице, на которую я ссылаюсь выше).

0 голосов
/ 31 августа 2010

Я знаю, что это не поможет вам прямо сейчас, но я настоятельно рекомендую вам использовать библиотеку JS, такую ​​как jQuery.Это делает вызовы ajax намного проще и кросс-браузерными.Это сделает ваш код более понятным, и вы сможете сосредоточиться на своей логике, а не на низкоуровневых проблемах браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...