【问题标题】:Jquery update all browsersjquery更新所有浏览器
【发布时间】:2011-09-09 01:01:36
【问题描述】:

我已经创建了一个私人聊天系统,一切正常,但我有一个问题,默认情况下聊天框不可见,所以一旦用户单击名称进行聊天,我将使用 jquery 来显示该聊天。

我想要的是,如果我向其他人发送消息,它应该自动将聊天框状态从隐藏更改为显示,让我给你看我的代码

    $('#send_now').live("keypress", function(e){
    me  = $(this);      
    if(e.which == 13)
    {
        getData();
    }
});

function getData(){
        var send_to = $(me).parent('#textareaPanel').children('#submit_send_to').val();
        var sender = $(me).parent('#textareaPanel').children('#submit_sender').val();
        var send_msg = $(me).val();

        var flick = '<div class="singleMsg"><p id="msgTop"><span class="name"><img src="images/avatar.png" width="15" height="15" alt="avatar" /> '+ sender +' said ---</span><span class="time"></span></p><p id="msgData">' + send_msg + '</p></div>';

        $('.' + sender).closest('#forclick').show();

        if(window.XMLHttpRequest)
        {
            xmlhttp = new window.XMLHttpRequest();
        }
        else
        {
            xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
        }

        xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == '4' && xmlhttp.status == '200')
        {

            response = xmlhttp.responseText;
            $(me).closest('#allMsgs').children('#fake').append(flick);
            $(me).val('');
        }
    }


    var send_msg = $(me).val();

    parameters = 'sender=' + sender + '&send_to=' + send_to + '&send_msg=' + send_msg;

    xmlhttp.open('POST', 'scripts/chat-submit.php', true);
    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlhttp.send(parameters);
    }

我正在做的是,一旦有人点击输入,它将使用 ajax 将数据发送到服务器,然后它会将该消息附加到发件人的屏幕上,现在问题是虽然聊天已发送,但接收者不确定因为他的聊天框是隐藏的,所以他必须点击我的名字才能查看是否有任何聊天。

谢谢

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    在您对服务器进行长轮询之前,您无法执行此操作。

    您可以每五秒发送一次 ajax 请求(甚至 StackOverflow 聊天都会这样做)以轮询最新数据

    setInterval(function(){
        poll();
    }, 5000);
    

    【讨论】:

    • 我这样做是为了在不同的功能中获取聊天记录,并且该功能正在获取所有登录用户的数据,因此在这种情况下,尽管我没有发送,但它会使所有聊天框都可见与任何人聊天。
    【解决方案2】:

    考虑重写你的代码。

    jQuery 已经集成了函数调用($.post,$.get 到 $.ajax 的快捷方式),它已经可以为用户的浏览器使用适当的 XMLHttpRequest,无需手动完成,这就是库是为了。

    其次,创世纪的答案就是你问题的答案。

    【讨论】:

    • 什么 genesis 说我正在这样做,让我们看看我是否有 3 个在线用户,所以如果我当时尝试显示聊天框 div,轮询功能将每 10 秒获取所有 3 个用户的数据它会让它们无缘无故地可见
    • 使用每个用户唯一的会话,并将会话标识符作为轮询代码的参数。
    猜你喜欢
    • 2018-08-21
    • 2011-01-19
    • 2011-09-22
    • 2020-06-30
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2019-07-25
    • 2012-12-09
    相关资源
    最近更新 更多