代码之家  ›  专栏  ›  技术社区  ›  Swathi

如何实现类似facebook的聊天,用户a向用户B发送消息而不刷新页面?

  •  -1
  • Swathi  · 技术社区  · 8 年前

    聊天窗口

    <div class="row msg_container base_sent">
        <div class="col-md-1">
            <?php if (empty($roww->customer_image[0]) || empty($roww->supplier_image)) { ?>
                <img src="<?php echo base_url(); ?>images/default.jpg" class="img-circle" width="30px" height="30px"/>
            <?php } else { ?>
                <img src="<?php echo 'data:image;base64,' . $roww->supplier_image; ?>" class="img-circle" width="30px" height="30px"/>
            <?php } ?>
        </div>
        <div class="col-md-11 col-xs-11">
            <div class="messages msg_sent">
    
                <p>
                    <!--In this p tag i want to set a set timeout function how to call in ajax success without page reload-->
                    <a href="#" data-toggle="tooltip"  data-placement="right" title="12am"><?php echo $row->message; ?> </a>
                </p>
            </div>
        </div>
    </div>
    

    剧本

    <script>
                $(document).ready(function () {
    
                    $('#data_form').on('submit', function (e) {
    
                        var form_data = $(this).serialize();
    
                        $.ajax({
                            type: "POST",
                            url: '<?php echo base_url(); ?>index.php/Profile_cntrl/buyer_communication',
                            data: form_data,
                            success: function (data)
                            {
                                scrollDown();
                                var message = $("#messagee").val();
    
    
                                $('#chat_log').append('<div class="row msg_container base_receive"><div class="col-md-12 col-xs-12"><div class="messages msg_receive"><p><a>' + message + '</a></p></div></div></div>');
    
                                $('#messagee').val('');
    
    
                            },
                            error: function ()
                            {
                                alert('failed');
                            }
                        });
    
                        e.preventDefault();
                    });
                    scrollDown();
                    function scrollDown() {
                        $('.msg_container_base').animate({scrollTop: $('.msg_container_base').prop("scrollHeight")}, 200);
                    }
                });
            </script>
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   J Shubham    8 年前

    实现这一点有很多选择,但你可以尝试一个更简单的方法。

    timed synchronous refresh 在您的消息分区上。

    它将加载新消息,而不会刷新整个页面,但会自动刷新特定的div。

     $(document).ready(function() {
       var refresh = function () {
         $(".msg_container").load("messages.php");  // link of page to return list of messages
       }
    
    setInterval(refresh, 9000);
      refresh();
    });
    

    您还可以通过将未读消息提取为json并在消息列表的末尾添加内容来提高效率。