Ajax聊天(加载消息)重复多个

时间:2014-04-18 07:02:08

标签: javascript php jquery ajax laravel

我使用(Ajax,jquery,PHP,mysql)

设计了一个聊天室

但是当有人向另一个人发送消息时,该消息会重复4-5次,

我正在使用此代码(jquery)

<script type="text/javascript">
          $(document).ready(function() {
            var interval = setInterval(function() {
               $.ajax({
                  url: 'getChatting/182/212',
                  success: function(data) {
                    $('#messages').prepend(data);
                  } 

              });
             }, 1000); // ervery 1 second the message box refresh to loading new message
          });
      </script>

// php code laravel

public function getChatting($from_id , $to_id){
    $ListChat = DB::table('cht_messages')
                ->where('user_from_id',$to_id)
                ->where('user_to_id',Auth::user()->id_user)
                ->where('readit_message',0)

                ->join('main_users','main_users.id_user','=','cht_messages.user_from_id')
                ->select('cht_messages.content_message','cht_messages.id_message' , 'main_users.display_name_user')
                ->orderby('cht_messages.created_at')
                ->get();

            DB::table('cht_messages')
            ->where('user_from_id',$to_id)
            ->where('user_to_id',Auth::user()->id_user)
            ->update(array('readit_message'=>1));
    $messages = '';

    if(Count($ListChat) > 0):
        foreach($ListChat as $message) {

            $messages .= '<span id="cht_auther" style="color:red;">'.$message->display_name_user.'</span>
                <span id="cht_date">01-01-2014</span>
                <span id="cht_spr"> : </span>
                <span id="cht_cnt">'.$message->content_message.'</span>
                <br clear="both"/>

                ';
        }
    endif;
    return $messages;

}

但它会重复超过6或7的消息,并且php代码会接收最后一条无法读取的消息......

抱歉我的英文不好

由于

1 个答案:

答案 0 :(得分:0)

当我创建聊天时,我使用PHP将JSON数组传递回我的Javascript,包含所有正常信息和unix时间戳。当我循环遍历该数组时,我检查时间戳。加载页面时,我有一个名为lastMessage的变量,每当我循环浏览消息时,我会检查消息时间戳是>lastMessage,如果不是,那么我不会将其显示给用户然后使用该消息的时间戳更新>lastMessage。如果您遇到用户在同一秒发布消息的问题,请使用microtime()代替time()获取时间戳。

http://uk1.php.net/microtime