未定义WebSocket URL变量

时间:2017-12-05 17:44:27

标签: javascript jquery websocket

我有这个JS代码,正在尝试连接到WebSocket,但是我对URL变量有疑问。

var tipoChat = 1;
var escolherWebSocket = 1;
var unidade = prompt('Qual o IP do Provador?');
var loja = prompt('Qual o codigo da Loja?');
var url;
ws = new WebSocket(url);
        

// tipoChat 1 Produto
// tipoChat 2 Vendedor
// tipoChat 3 Atendente


function chatProduto() {
    tipoChat = 1;

    $("#btnProduto").addClass("btn-menuStyle-active");
    $("#btnAtendente").removeClass("btn-menuStyle-active");
    $("#btnVendedor").removeClass("btn-menuStyle-active");

     $("#provador-produto").removeClass("show-chat1");
     $("#provador-produto").removeClass("show-chat2");
     

}

function chatVendedor() {
    tipoChat = 2;

    $("#btnProduto").removeClass("btn-menuStyle-active");
    $("#btnAtendente").removeClass("btn-menuStyle-active");
    $("#btnVendedor").addClass("btn-menuStyle-active");

     $("#provador-produto").addClass("show-chat2");
     $("#provador-produto").removeClass("show-chat1");
   


}

function chatAtendente() {
    tipoChat = 3;

    $("#btnProduto").removeClass("btn-menuStyle-active");
    $("#btnAtendente").addClass("btn-menuStyle-active");
    $("#btnVendedor").removeClass("btn-menuStyle-active");

     $("#provador-produto").addClass("show-chat1");
     $("#provador-produto").removeClass("show-chat2");
     



}


function conectar() {
    $('#btnConectar').hide();
    $('#btnDesconectar').show();
    
                ws.onopen = function () {

                    $('#messages').prepend('Connected <br/>');
                    $('#cmdSend').click(function () {

                        ws.send($('#txtMessage').val());

                        $('#txtMessage').val('');

                    });
                    
   
}
}

switch (tipoChat) {

    case "1": // Chat Produto

        switch (escolherWebSocket) {

            case "1": //CBYK
                var url = 'ws://example0';
                break;

            case "2": //Centauro
                var url = 'ws://example0';
                break;

            default:
                alert("Código de Socket Inválido");
        }

    case "2": // Chat Vendedor

        switch (escolherWebSocket) {
            case "1":
                var url = 'ws://example0';
                break;

            case "2":
                var url = 'ws://example0';
                break;

            default:
                alert("Código de Socket Inválido");
        }

    case "3": //Chat atendente
        switch (escolherWebSocket) {
            case "1":
                var url = 'ws://example0';

                break;

            case "2":
                var url = 'ws://example1';
                break;

            default:
                alert("Código de Socket Inválido");      
}}

这是我在控制台上的错误:

未捕获的DOMException:无法构造“WebSocket”:URL“未定义”无效。

有人可以说为什么Switch没有设置Url变量? 它仅在我在控制台上分配值时才有效。

修改
出于某种原因,当我在控制台上调用URL变量时,结果是未定义的,即使我在切换后初始化WebSocket。我真的不知道为什么没有定义URL变量

var typeChat = 1;
var escolherWebSocket = 1;
var url;

switch (typeChat) {

    case "1": // Chat Produto

        switch (escolherWebSocket) {

            case "1": //CBYK
                var url = 'ws://example0';
                break;

            case "2": //Centauro
                var url = 'ws://example0';
                break;

            default:
                alert("Código de Socket Inválido");
        }

    case "2": // Chat Vendedor

        switch (escolherWebSocket) {
            case "1":
                var url = 'ws://example0';
                break;

            case "2":
                var url = 'ws://example0';
                break;

            default:
                alert("Código de Socket Inválido");
        }

    case "3": //Chat atendente
        switch (escolherWebSocket) {
            case "1":
                var url = 'ws://example0';

                break;

            case "2":
                var url = 'ws://example1';
                break;

            default:
                alert("Código de Socket Inválido");      
}}

ws = new WebSocket(url);

2 个答案:

答案 0 :(得分:0)

只需初始化&#39; url&#39;变量在顶部。因为您正在创建一个带有&#39; url&#39;变量而不首先初始化它。所以&#39; url&#39;变量目前尚未定义。

或者您创建了分配给&#39; url&#39;的套接字。变量,即在开关块情况下。

答案 1 :(得分:0)

您无法使用未定义的网址初始化WebSocket,就像您在这里一样:

var url;
ws = new WebSocket(url);

在初始化switch之前,您应该执行new WebSocket(url)声明。

var url;
switch (tipoChat) {
    case 1:
        url = 'foo';
}
ws = new WebSocket(url);