NSProject
28 лютого 2022 р. 01:58

Cложности с кодом javascript в приёме данных из WebSoket

django, JavaScript

var ws = ""
let btn = document.querySellector('#send')
let room = document.querySellector('#room")
let input = document.querySellector('#input-message")
let 

room.addEventListener("click", function(e){
    if(ws){
        ws.close()
    }
    ws = new Websocket("ws://"+ window.location.host + "/ws/message")
}

btn.addEventListener("click", function(e){
    message = input.value
    ws.send(
        JSON.stringify({
               'message': message,
            })
    )   
}

ws.onmessage = function(e){
    let data = JSON.parse(e.data)
    document.querySellector('#msg-log").innerHTML += "<li class='msg'>" + data.message + "</li>
}


Подключение и отправка сообщения работают. Не работает функция ws.onmessage.
Есть какие то способы это исправить как то?

2

Вам це подобається? Поділіться в соціальних мережах!

2
Evgenii Legotckoi
  • 28 лютого 2022 р. 14:03
  • Відповідь була позначена як рішення.

Вам нужно onmessage подключить сразу после создания сокета, когда вызывается оператор new, поскольку на момент подключения onmessage у вас просто мусор в переменной ws

Как минимум так должно выглядеть

var ws = ""
let btn = document.querySellector('#send')
let room = document.querySellector('#room")
let input = document.querySellector('#input-message")
let 

room.addEventListener("click", function(e){
    if(ws){
        ws.close()
    }
    ws = new Websocket("ws://"+ window.location.host + "/ws/message")
    ws.onmessage = function(e){
        let data = JSON.parse(e.data)
        document.querySellector('#msg-log").innerHTML += "<li class='msg'>" + data.message + "</li>
    }
}

btn.addEventListener("click", function(e){
    message = input.value
    ws.send(
        JSON.stringify({
               'message': message,
            })
    )   
}

    NSProject
    • 28 лютого 2022 р. 20:26

    Большое спасибо за совет. Я чегодня только под утро к такому же варианту пришёл. Методом научного тыка. Но думал есть решение другое, а оно оказалось вон как элементарно.

      Коментарі

      Only authorized users can post comments.
      Please, Log in or Sign up