Websocket 阻止我的 jQuery 工作

Posted

技术标签:

【中文标题】Websocket 阻止我的 jQuery 工作【英文标题】:Websocket blocking my jQuery from working 【发布时间】:2016-07-08 13:15:05 【问题描述】:

我在我的网站中添加了一个 web-socket,现在我所有的 jQuery 代码都停止工作了。

我不知道问题是什么。我该如何解决这个问题?

这里是完整的 jQuery 代码:

$(document).ready(function()
    var i = parseInt($('#counter').val(), 10);

    $("#postcount").on("click", function()
        var z = i ++;
        $('#counter').val(z);
        alert(z);
    );
);

Websocket 脚本

var socket;
function init() 
    var host = "ws://127.0.0.1:9000/echobot";
    try 
        socket = new WebSocket(host);
        //log('WebSocket - status '+socket.readyState);
        log('1');
    
    catch(ex) 
        log(ex); 
    
    $("msg").focus();

function send()
    var txt,msg;
    txt = $("msg");
    msg = txt.value;
    if(!msg)  
        log("Message can not be empty");
        return; 
    
    txt.value="";
    txt.focus();
    try  
        socket.send(msg); 
        log("<b>"+msg+"</b>"); 
     catch(ex)  
        log(ex); 
    


// Utilities
function $(id) 
    return document.getElementById(id);

function log(msg) 
    $("log").innerhtml = msg;

function onkey(event) 
    if(event.keyCode==13) 
        send();
    

首页

<body onload="init()">
    <div id="log"></div>
    <input id="msg" type="textbox" onkeypress="onkey(event)" 
                                   onchange="send()" onkeyup="send()"/>
    <button onclick="send()">Send</button>
    <br/>

    <input id="counter" type="textbox" value="2"/>
    <input type="button" id="postcount" class="postcount" value="Reconnect"/>
</body>

【问题讨论】:

您至少检查过控制台是否有错误吗? 我从控制台@RoryMcCrossan 找不到问题所在 什么是function $(id) @ᾠῗᵲᄐᶌ 我从不检查几个小时前我下载的 web-socket 是什么让我删除它并运行脚本看看会发生什么 function $(id) 可能会覆盖 jQuery,因为您正在重新定义 $('element') 所做的事情。它曾经返回一个 jQuery 对象,但您已经覆盖它以返回具有该特定 ID 的 dom 元素。切换函数名称或jQuery - 使用jQuery('element') 而不是$('element') 【参考方案1】:

试试完整的例子:

$(document).ready(function()
    var i = parseInt($('#counter').val(), 10);

    $("#postcount").on("click", function()
        var z = i ++;
        $('#counter').val(z);
        alert(z);
    );

    init();
);

var socket;
function init() 

    var SO = window.WebSocket || window.MozWebSocket;

    var host = "ws://127.0.0.1:9000/echobot";
    try 
        socket = new SO(host);
        //log('WebSocket - status '+socket.readyState);
        log('1');
    
    catch(ex) 
        log(ex); 
    

    $("msg").trigger("focus");

function send()
    var txt,msg;
    txt = $("#msg");
    msg = txt.val("");
    if(!msg)  
        log("Message can not be empty");
        return; 
    
    txt.val("");
    txt.focus();
    try  
        socket.send(msg); 
        log("<b>"+msg+"</b>"); 
     catch(ex)  
        log(ex); 
    



function log(msg) 
    $("#log").html(msg);

function onkey(event) 
    if(event.keyCode==13) 
        send();
    

【讨论】:

以上是关于Websocket 阻止我的 jQuery 工作的主要内容,如果未能解决你的问题,请参考以下文章

C# HttpListener Prefixes 不接受 `ws` 阻止 JS WebSocket 连接

Websocket阻止来自服务器的传入请求

使用 CDN 会阻止 Intellisense 为 jQuery 工作吗?

公共互联网何时(以及多久)会阻止 WebSocket 连接?

为啥在 Jquery 中添加“阻止程序”类后我的事件绑定不再触发?

Jquery mobile 阻止从我的基于 django 的站点下载