2014-04-09 38 views
0

我正在开发一个简单的消息传递系统,客户将能够为每个项目创建对话并与项目经理进行通信。Ajax简单消息应用程序

到目前为止我已经创建的是通过jQuery和Ajax发送/删除消息。

<ul class="messages" id="messages"> 
      <?php 
       foreach ($replies as $reply): // replies stores all messages for this current conversation between two users 
      ?> 
      <li class="message" id="message"><?php echo $reply->content; ?><a href="<?php echo $reply->id; ?>" id="delete">delete</a></li> 
      <?php 
       endforeach; 
      ?> 
     </ul> 

但是,这有效。客户或项目经理能够看到他们的消息,但只能在刷新页面时看到答复。

有无论如何查询数据库的消息和更新列表与答复??

jQuery(function(){ 


      $("#messages").on('click', '#delete', function(event) { 
       event.preventDefault(); 
       var id = $(this).attr('href'); 
       $.post("<?php echo base_url(); ?>messages/delete", { type:'single', id:id }) 
        .done(function(data) { 
        }); 
       $(this).closest('.message').remove(); 
      }); 

     $('#send').click(function(e){ 
      e.preventDefault(); 
      var reply = $('#reply').val(); 
      var project_id = 44; 
      if(reply==""){ 
       return false; 

      } 

      $.ajax({ 
       type: "post", 
       url: "<?php echo base_url(); ?>messages/send", 
       data:{ msg:reply, project_id:project_id, user_id:2, admin_id:1}, 
       success: function (response) { 

        if(response){ 

         $(".messages").append('<li class="message">'+reply+'<a href="'+response+'" id="delete">delete</a></li>'); 
         $('#reply').val(''); 
        }else{ 

        } 
       } 
      }); 
     }); 
    }); 
+0

您可以每分钟轮询一次服务器以获取更新,您可以进行长轮询,也可以执行websocket。然后,您需要编写代码,将获取的数据回放并循环,将其置于布局的适当位置。 –

回答

0

除非您想在套接字上打开并侦听一些更复杂的东西,否则您需要轮询结果。您可以创建一个JavaScript函数,该函数将向计时器上的服务器发送ajax请求并发回消息。要小心,如果你有很多用户,你可能会提出很多请求。

这里是一个有趣的方式使用带的setTimeout递归函数来做到这一点,一个$ .Deferred对象的要点是:

function poll_timer(data, def, frequency){ 

    def.notify(data,def); 

    $ajax.('getmessage.php').done(
    function(results){ 
     setTimeout(
       function(){ 
        poll_timer(data,def); 
       }, frequency); 
     } 
    ); 
} 

那么你就可以实现像这样(轮询每三秒钟):

var def = $.Deferred(); 

def.progress(function(data,def){ 
    $('#target').html(data.message); 
}); 

poll_timer(null, def, 3000) 
相关问题