从外部加载脚本时,Javascript Websocket意外关闭

时间:2018-07-05 07:14:15

标签: javascript django websocket django-channels

在Django中构建聊天应用程序时,我使用了嵌入式javascript并有效。但是,如果我在外部JavaScript中编写相同的代码,则WebSocket将关闭。我已经检查了所有链接和静态文件路径。脚本已完全加载,但WebSocket打开后会关闭。

Here's the tutorial from Official Django Channels website,并且该javascript只能以嵌入式形式工作,而不能在外部脚本中工作。

而且,here's my Github repo是我实现Websocket的地方。 如何用外部脚本而不是嵌入式脚本编写JS代码?我已经用Google搜索,但是没有任何帮助,甚至this问题都没有得到答案。

这是我正在谈论的代码,如果在外部定义,则websockets将无法工作:

<!-- chat/templates/chat/room.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Room</title>
</head>
<body>
    <textarea id="chat-log" cols="100" rows="20"></textarea><br/>
    <input id="chat-message-input" type="text" size="100"/><br/>
    <input id="chat-message-submit" type="button" value="Send"/>
</body>
<script>
    var roomName = {{ room_name_json }};

    var chatSocket = new WebSocket(
        'ws://' + window.location.host +
        '/ws/chat/' + roomName + '/');

    chatSocket.onmessage = function(e) {
        var data = JSON.parse(e.data);
        var message = data['message'];
        document.querySelector('#chat-log').value += (message + '\n');
    };

    chatSocket.onclose = function(e) {
        console.error('Chat socket closed unexpectedly');
    };

    document.querySelector('#chat-message-input').focus();
    document.querySelector('#chat-message-input').onkeyup = function(e) {
        if (e.keyCode === 13) {  // enter, return
            document.querySelector('#chat-message-submit').click();
        }
    };

    document.querySelector('#chat-message-submit').onclick = function(e) {
        var messageInputDom = document.querySelector('#chat-message-input');
        var message = messageInputDom.value;
        chatSocket.send(JSON.stringify({
            'message': message
        }));

        messageInputDom.value = '';
    };
</script>
</html>

0 个答案:

没有答案