javascript - 如何使用ajax刷新聊天记录

标签 javascript jquery html ajax

我正在基于 twilio api 实现文本聊天,我有以下功能可以在单击时加载聊天、发送消息、获取最后一条消息(将间隔设置为 1 秒以实时更新),并且我将添加检查是否数据未设置,不执行任何其他操作,获取最后一条消息, 我需要获取当前点击项的数据值

这是脚本和日志

[![<script type="text/javascript">
    $(document).ready(function(){
loadContacts();
displayChatOnclick();
setInterval(getlastmsg,1000);
}
  );
    //when the user clicks on contacts div fetch the chat history
    function displayChatOnclick(){   
$('#contacts').on('click','li',function() {
    var channel = $(this).closest('li').attr('data-channel');
    var name=$(this).closest('li').attr('data-name'); 
    console.log(channel);
    fetchChat(channel,name);
    sendmsg();
    //check if new msg is sent
});
}
    function fetchChat(channel,name){
$.ajax({
        url: 'loadchat.php',
        type: 'POST',
        data: { channel:channel,name:name },


success: function(msg) {
                       console.log(name);
                       $('#conversation').html(msg);
                       }
});    
}
function loadContacts(){
    $.ajax({
            url: 'loadcontacts.php',
            type: 'POST',


            success: function(msg) {
                                   $('#contacts').html(msg);
                                   }
          });    
}
//function to get the last msg 
function getlastmsg(){
  var channel = $('#contacts li').data('data-channel');
    var name=$('#contacts li').data('data-name'); 



    //check if channel and name is null do nothing else fetch last message

    console.log(name);




}
//function to send a msg
function sendmsg(){

      $("#send").click(function() {
          var channel=$(this).data('ch');
         var message=$("#msg").val();
              $('#msg').val('');

          console.log(msg);
        $.ajax({
            type: "POST",
            url: "sendmsg.php",
            data: {
                msg: message,
                channel:channel,

            },
            success: function(result) {
                console.log("sent");
           $('#b').append(result);
              }
        });
    });
}

</script>][1]][1]

最佳答案

你正在做的是一个拉方法:setInterval不是最好的主意,因为它会不断地调用你的服务器,不管有没有改变,想象一下如果你有1000个用户它们每一秒都会向服务器发送一个请求。

我建议您使用推送方法,例如SignalRhere is a demo for chat that you can do with small number of lines

关于javascript - 如何使用ajax刷新聊天记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59763808/

相关文章:

javascript - jQuery 文本扩展器插件 : Error for know the browser

javascript - 作为 jQuery DOM 操作结果的 CSS 转换

javascript - 有没有一种方法可以同时添加 onkeypress 和 onclick 事件监听器?

html - 悬停问题 - 悬停时显示图像

javascript - 如何确保给定键和值的对象类型的类型安全?

jquery - 使用 jQuery 验证来检查选中的复选框

javascript - 我可以动态获取 Html 元素的 onclick 属性并在 JavaScript 中使用它吗?

html - html 表单中正确和正确的标记

javascript - 从流 onError 中恢复的惯用方法

javascript - 使用包含选项拖动时引导模式消失