2014-02-06 2 views
0

Я пытаюсь создать чат-систему. Проблема в том, что один пользователь вводит сообщение другому, окно чата не будет отображаться мгновенно с этим сообщением получателю. Только после того, как ресивер освежает окно, все работает нормально. Вот мой текущий код:Показать окно чата при получении нового сообщения

profile.php

setInterval(function(){ 
    var username="<?php echo $username; ?>"; 
    $.ajax({ 
     url:"s/shower.php", 
     type:"POST", 
     data:"shower=" + username, 
     success:function(data){ 
       if (data == 1){ 
        $(".pchat").show(); 
       } 
     } 
    }); 
},500); 

$(".chat_wind").click(function(){ 
    var id=$(this).attr("id"); 
    var newid=id.split("chat_wind"); 
    var datid=newid[1]; 

    $(".pchat").show(); 

}); 


$(".chatform").submit(function(){ 
    var parent=$(this).attr("id"); 
    var split=parent.split("chatform"); 
    var newid=split[1]; 

    var val=$("#chati").val(); 
    if (val.length == 0){ 
     return false; 
    } 

    $.ajax({ 
     url:"s/log.php", 
     type:"post", 
     data:"newid=" + newid + "&txt=" + val, 
     success:function(data){ 
      setInterval(function(){ 
       $.ajax({ 
        url:"s/chat.php", 
        type:"post", 
        data:"username=" + newid, 
        success:function(w){ 

         var objDiv = document.getElementById("cbody"); 
         objDiv.scrollTop = objDiv.scrollHeight; 
         $("#cbody").html(w); 
        } 
       }); 
      },500); 
     } 
    }); 

    $("#chati").val(""); 
    return false; 
}); 

chat.php

<?php 
    include "db.php"; 
    include "timeago.php"; 

    if (isset($_POST['username'])){ 
     $username=$_POST['username']; 
     $dat=''; 
     $sql=mysql_query("SELECT * FROM chat where uchated='$username' ORDER BY time asc"); 
     while($row=mysql_fetch_array($sql)){ 
      $time=$row['time']; 
      $txt=$row['text']; 

      $dat.=" 
       <div id='msg'> 
       $txt <div id='ctime'></div> 
       </div>"; 

     } 
     echo $dat; 
    } 

?> 

shower.php

<?php 
    include "db.php"; 
    if (isset($_POST['shower'])){ 
     $shower=$_POST['shower']; 

     $sqlara=mysql_query("SELECT * FROM chat where uchated='$shower'"); 

     $numara=mysql_num_rows($sqlara); 

     if ($numara == 0){ 
      echo "0"; 
     }else{ 
      echo "1"; 
     } 
    } 
?> 
+0

Использование $ ("# cbody") добавить (ш); вместо $ ("# cbody"). html (w); – Jagadeesh

ответ

1

Вы должны использовать WebSockets реализовать систему чата. Я не знаю php. вы можете попробовать эту ссылку http://www.sanwebe.com/2013/05/chat-using-websocket-php-socket, чтобы понять программирование websocket

+0

websockets и socket.io (с возможностью использования backend-узла node.js) - лучшее решение для чата реального времени. – ArVan

0

Если вам действительно нужно, вы можете перейти на WebSocket и Server-Sent Events, которые поддерживаются в HTML5. Но для начала длинный опрос был бы в порядке. Затем вы можете понять требования своего сайта чата и обновить его. .

Read more on these methods (link).

Смежные вопросы