如果用户有新消息,如何用ajax刷新聊天页面?

时间:2018-02-11 16:36:20

标签: javascript php ajax laravel

现在我用Laravel创建聊天应用程序。并且可以在通过ajax发送消息后发送消息并刷新messageBox容器。但是,如果我向他发送新消息,我就无法刷新我的聊天伙伴页面,如果我的聊天伙伴向我发送新消息,则反过来刷新页面。在我的数据库中,我有一个消息显示状态字段。如果没有看到消息它将反过来为1.如果通过ajax有新消息,我如何刷新页面或div内容? 这是我的发送代码:

<script type="text/javascript">
    var username;
    var submitButton;
    var textarea;
    $(document).ready(function(){
        username = $('#username').html();
        textarea = $('#texxt');
        submitButton = $('.send');

        $(textarea).keyup(function(e){
            if(e.keyCode == 13){
                sendMessage();
                $('body').load('').fadeIn('slow');
            }
        });
    });

    function sendMessage(){
        var message = $('#texxt').val();
        var user_id = $('#user_id').val();
        if(message.length > 1){
            $.post('/message',{
                message: message,
                id: user_id,
                _token:'{{csrf_token()}}'
            },
            function(data){
                $('#texxt').val('');
            });
        }
    }
</script>

3 个答案:

答案 0 :(得分:1)

要实现这一目标,您需要考虑:https://socket.io

所有作业都在触发事件,因此您可以使用此事件向其他用户显示消息,或者获取新消息操作......但要做到这一点,您需要使用套接字:)

答案 1 :(得分:0)

使用Ajax,您必须定期查看setInterval并查看邮件是否已到达,然后再对其执行操作:

setInterval(function(){
  $.getJSON("/my_check_message.php",
            {user_id: user_id}, 
            function (answer) {
               if answer.new_messages.length>0){
                  //do something
               }), 5000)

它假设您从php页面answer.new_messages作为数组返回(您可以有多个新消息)

编辑 5000代表5000毫秒。所以这将每5秒进行一次检查。根据您的需求进行调整!

答案 2 :(得分:0)

使用laravel echo,它可以显示一个socket.io服务器,您可以使用echo将后端中的事件广播到前端客户端。