автоматическое обновление веб-страницы при обновлении базы данных - PullRequest
0 голосов
/ 04 ноября 2011

У меня сейчас проблемы.Я создаю веб-сайт с функцией чата.На данный момент мы смогли обновить область, в которой будут появляться сообщения, когда пользователь отправляет сообщение.но у нас есть некоторые проблемы.мы использовали jquery, чтобы вся страница не перезагружалась, а вместо этого использовался только iframe, отведенный только для чата. Чат будет работать правильно, и через несколько минут он начнет перезагружаться снова и снова.вот что мы имеем сейчас ...

    <?php
     session_start();
     include "connect.php";
     $room = $_SESSION['room'];
     $getnummessages="SELECT COUNT(*) as messagecount from tbl_chatmessages";
     $getnummessages2=mysql_query($getnummessages) or die("blah");
     $getnummessages3=mysql_result($getnummessages2, 0);

     if($getnummessages3>21)
     {
        $startrow=$getmessages3-20;
     }
     else 
     {
        $startrow=1;
     }   

     date_default_timezone_set ("Asia/Manila");
     $date = date("Y-m-d");

     // Configuration part 
     $path = "images"; // Path to the directory where the emoticons are 


    //smiley
    // Query the database, and assign the result-set to $result 
    $query = "SELECT emote, image FROM emoticons"; 
    $result = mysql_query($query); 

    // Loop through the results, and place the results in two arrays 
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $emotes[] = $row['emote']; 
    $images[] = "<img src='" . $path . "/" . $row['image'] . "'>"; 
    } 

    // The line below replaces the emotes with the images 
     echo str_replace($emotes, $images, $text);

     $getmsg="SELECT * from tbl_chatmessages a, jcow_accounts b WHERE                         a.room_number='$room' && b.username=a.user_alias && a.date='$date' ORDER BY postime DESC";
     $getmsg2=mysql_query($getmsg) or die(mysql_error());

     while($getmsg3=mysql_fetch_array($getmsg2))
    {

        //$message=Smilify($subject); //Smiley faces
                print "<table name='tablechat' id='tablechat' cellspacing='0' cellpadding='0' style='margin-top:0px;margin-left:0px;padding:0px;'>";
                print "<tr><td rowspan='2'><a href='index.php?p=u/$getmsg3[user_alias]' target='_blank'>
               <img src='http://www.pinoyarea.com/uploads/avatars/$getmsg3[avatar]' width='50px' height='50px'/></td><td><font color='#333333' style='text-decoration:none;font-size:14px;font-family:tahoma;'><b>&nbsp;$getmsg3[name]</b></font></a>       <font color='#666666' style='text-decoration:none;font-size:10px;font-family:tahoma;'>($getmsg3[time]):</font></td></tr><tr><td><font style='font-family:tahoma;font-size:12px;padding-left:5px;'>".str_replace($emotes, $images, $getmsg3[message])."</font></td></tr>";
               print "</table>";    
         }


      function Smilify(&$subject)
        {
          $smilies = array(
            ':D'  => 'icon_biggrin',
            ':)' => 'icon_smile',
            ':(' => 'icon_sad',
            ':o' => 'icon_surprised',
            ':shock:' => 'icon_eek',
            ':?'  => 'icon_confused',
            ':8'  => 'icon_cool',
            ':lol:'  => 'icon_lol',
            ':x:' => 'icon_mad',
            ':p'  => 'icon_razz',
            ':red:' => 'icon_redface',
            ':cry:'  => 'icon_cry',
            ':evil:' => 'icon_evil',
            ':twisted:'  => 'icon_twisted',
            ':roll:' => 'icon_rolleyes',
            ':wink:'  => 'icon_wink',
            ':!:' => 'icon_exclaim',
            ':?:'  => 'icon_question',
            ':idea:' => 'icon_idea',
            ':arrow:'  => 'icon_arrow',

         );

$sizes = array(
    'icon_cry' => 18,
    'icon_cool' => 20,
    'haha' => 20,
    'icon_surprised' => 20,
    'icon_exclaim' => 20,
    'icon_razz' => 20,
    'icon_mad' => 18,
    'icon_rolleyes' => 20,
    'icon_wink' => 20,
);

  $replace = array();
  foreach ($smilies as $smiley => $imgName)
   {
        $size = $sizes[$imgName];
        array_push($replace, '<img src="images/'.$imgName.'.gif" alt="'.$smiley.'" width="'.$size.'" height="'.$size.'" />');
   }
   $subject = str_replace(array_keys($smilies), $replace, $subject);
  }

     ?>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js">   </script>
    <script>
     $(document).ready(function() {
     $("#tablechat").load("chatlog.php");
     var refreshId = setInterval(function() {
     $("#tablechat").load('chatlog.php?randval='+ Math.random());}, 6000);
   });
    </script>

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

лучший способ, который я рекомендую CometD для всегда тянуть, это усовершенствованная технология для толчка http://cometd.org/

0 голосов
/ 04 ноября 2011

Это код для страницы, которая загружается в iframe? Если это так, проблема, вероятно, в том, что у вас есть код для таймера внутри него. Каждый раз, когда вы перезагружаете кадр, вы добавляете новый интервальный таймер, каждый раз, когда он запускается, он загружает новый таймер и т. Д.

Решение состоит в том, чтобы переместить JavaScript, который у вас есть в конце, из iframe и вместо этого поместить его на родительскую страницу.

...