2017-05-18 17 views
0

私はとても簡単なチャットアプリケーションを書いています。私はページをリフレッシュせずにデータベースにデータを挿入するコードを書いています。しかし、同時に2人のユーザーでテストすると、新しいメッセージを送信したときに他のユーザーが私に送信した内容がわかります。どうすればそれをより生き生きとすることができますか?私は1日中ウェブサイト(特にsocket.io、ラチェット)とロングポーリングを読んで過ごしました。私はここで興味深いソリューションを見つけましたが、私はすでに書いたコードで実装しようとしています。それは私を混乱させます。私はデータベースからデータを取得するためにPHPのステートメントを使用しています。リアルタイムライブメッセージングの実装方法jQuery Ajax Mysql Php

ワーキングAjaxコード

<script> 
$(document).ready(function(){ 
$("#buttons").click(function(){ 
var fromuserid = $("#fromUserId").val(); 
var touserid = $("#toUserId").val(); 
var chatMessage = $("#chatMessage").val(); 
// stored in database. 
var dataString = 'fromUserId='+ fromuserid + '&toUserId='+ touserid + '&chatMessage='+ chatMessage; 
// AJAX 
$.ajax({ 
type: "POST", 
url: "chat.php", 
data: dataString, 
cache: true, 
success: function(response){ 
    $("#displayMessage").html(response); 
     $("#chatForm").trigger("reset"); 
} 
}); 

return false; 
}); 
}); 
    </script> 

PHPは、実際にそれがメッセージをプッシュしてくるときに使用するのに最適な言語ではありません声明

 <div id='displayMessage' style='height: 480px; padding:5%; overflow-x:hidden;'> 
     <?php 
      $chatmsgQ="SELECT * FROM ve_chat c 
    WHERE c.isActive='1' AND (c.fromUserId='$loginid_session' 
    OR c.toUserId='$loginid_session')"; 
$chatmsgresult= mysqli_query($db,$chatmsgQ); 
     while($chatmsg= mysqli_fetch_array($chatmsgresult)){?> 
    <?php if($chatmsg['fromUserId']==$loginid_session):?> 
    <!-- user one --> 
<p class='bubble pull-left'><?=$chatmsg['message'];?></p> 
<?php elseif($chatmsg['fromUserId']!=$loginid_session):?> 
    <!-- user two--> 
<p class='bubbleother pull-right'><?=$chatmsg['message'];?></p> 
<?php endif;?> 
<?php } ;?> 
    </div> 
+0

クエリに含まれるテーブルスキーマを表示します。両方のユーザーからのメッセージを取得していますか?クエリはphpMyAdmin(または同様のもの)で動作しますか? –

答えて

2

ながら、それは本当に典型的なGETを中心に構築されています/応答がちょっと流れます。

http://www.nodejs.orghttp://socket.io/ちょっとセットアップが簡単で、大部分の作業でPHPを使い、ノードを使ってプッシュメッセージを扱うことができます。

+0

Node.jsが私のポートを混乱させてしまい、この時点で私が遅くなると思う? –

+0

node.jsとphpは2つの独立したプロセスになるので、それらの間のものだけを呼び出すことはできませんし、クライアント側でnode.js関数を呼び出すこともできません。 –

1

アプリケーションをよりライブにするには、 setIntervalメソッドを使用する必要があります。このプロジェクトを使用Simple php, ajax and mysql chat application.

+0

素晴らしいプロジェクトマン。それは私がする必要があるようです。私のコードを例にして教えていただけますか?ちょうど働くスニペットだけ複雑すぎる必要はありません。私は 'window.setInterval(function(){ $("#displayMessage "); load(" chat.php "); }、2000);を追加しようとしましたが、それは私に未定義のインデックス –

+0

を与えます。私はすぐに例をアップロードします。そして、これが良い答えなら、それを受け入れてください。 –

関連する問題