2011-11-04 4 views
0

Je rencontre actuellement des problèmes. Je crée un site Web avec une fonction de discussion. à partir de maintenant, nous étions en mesure de mettre à jour la zone dans laquelle les messages apparaîtraient lorsque l'utilisateur soumet un message. mais nous avons quelques problèmes. Nous avons utilisé jquery pour que toute la page ne soit pas rechargée, mais seulement l'iframe altered pour le chat seulement. Le chat fonctionnerait correctement et après quelques minutes, il commencerait à recharger encore et encore. voici ce que nous avons en ce moment ...mise à jour automatique de la page Web lors de la mise à jour de la base de données

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

Répondre

0

Est-ce le code de la page chargée dans l'iframe? Si c'est le cas, le problème est probablement que vous avez le code pour le minuteur à l'intérieur. Chaque fois que vous rechargez le cadre, vous ajoutez un nouveau temporisateur d'intervalle, chaque fois que le temporisateur s'exécute, il charge un nouveau temporisateur et ainsi de suite.

La solution est de déplacer le JavaScript que vous avez à la fin de l'iframe et de le placer dans la page parent à la place.

+0

nous avons déjà fait cela et même chose. –

0

la meilleure façon que je recommande cometd pour toujours tirer, il est la technologie adavenced pour pousser http://cometd.org/

Questions connexes