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

Javascript 如果用户有新消息,如何使用ajax刷新聊天页面?,javascript,php,ajax,laravel,Javascript,Php,Ajax,Laravel,现在我用Laravel创建聊天应用程序。通过ajax发送消息后,可以发送消息并刷新messageBox容器。但若我要给他发送新消息,我不能刷新我的聊天伙伴页面,反之,若我的聊天伙伴给我发送新消息,我不能刷新页面。在我的数据库中,我有一个字段,其消息状态为SEED。如果未看到消息,则它将为0或1。如果通过ajax有新消息,如何刷新页面或div内容? 这是我的发送代码: <script type="text/javascript"> var username; var s

现在我用Laravel创建聊天应用程序。通过ajax发送消息后,可以发送消息并刷新messageBox容器。但若我要给他发送新消息,我不能刷新我的聊天伙伴页面,反之,若我的聊天伙伴给我发送新消息,我不能刷新页面。在我的数据库中,我有一个字段,其消息状态为SEED。如果未看到消息,则它将为0或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>

要做到这一点,您需要考虑:

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

对于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返回,作为一个数组,您可以有多条新消息


edit5000代表5000毫秒。这将每5秒进行一次检查。适应你的需要

使用laravel echo,它为socket.io服务器提供便利,您可以使用echo在后端将事件广播到前端客户端。

此外,这里还有laracast,与socket.io系统相比,这是低效的。通过创建状态机,您可以在系统真正空闲时创建额外的进程。不过,我同意socket.io将是一个更合适的解决方案事件,因为它需要一些实现工作。我完全同意我应该声明您已经回答了这个问题。我只是在评论。