Socket.io,保持不同的页面不接收每条消息?

时间:2015-12-22 03:04:25

标签: javascript node.js socket.io

很抱歉这个令人困惑的标题,但我不知道如何解释我的问题,有人请为我编辑它。所以我有一个网站页面,可以从节点服务器接收消息。

socket.on('item finished', function(data){
    $('#item'+data).html('finished');
});

所以基本上我告诉客户,一旦项目完成,它必须告诉用户。 我将所有js代码放在script.js中并在页面中调用它,所以我的所有页面都有脚本。每当我在其他页面上并且服务器向客户端发出'item finished'时,控制台上就会弹出一条消息。

Uncaught TypeError: Cannot read property 'html' of null

错误并不是那样,但是你明白了,客户端正在尝试做它应该做的事情,但我不希望这种情况发生。 那么有没有办法在不同的页面中使用相同的脚本文件来避免控制台错误?我错过了什么? 谢谢!

1 个答案:

答案 0 :(得分:2)

对于不适用于给定页面的邮件,您有多种选择。

  1. item finished消息侦听代码分离到单独的脚本中,以便仅加载该脚本,并且侦听器仅在您要实际响应该消息的页面中处于活动状态。

  2. 保留所有页面中您收听该消息的方式,但在该消息的处理程序中,检查您所在的页面类型,以决定是否应该忽略该消息或者用它做某事,从而避免在它错误的页面时试图用它做什么。

  3. 对执行操作的代码进行防弹,以便在尝试操作之前检查所需元素是否存在。这看起来像这样:

  4. 代码:

    // You aren't supposed to have to do this in jQuery, so I'm guessing that
    // you aren't actually showing us the right code or error message
    // But, this is the general idea of defensive coding
    socket.on('item finished', function(data){
        var target = $('#item'+data);
        if (target.length) {
            target.html('finished');
        }
    });