繁体   English   中英

如何使用 JSON 通过 websockets 发送 Django 数据?

[英]How can I use JSON to send Django data over websockets?

我正在开发一个通过 websockets 发送数据的 django 应用程序

我将数据放入 java object 转换为 JSON 然后在另一端解析

我的代码是

chatSocket.onmessage = function(e) {
    console.log(e)
    const data = JSON.parse(e.data);
};

document.querySelector('#chat-message-submit').onclick = function(e) {
    const messageInputDom = document.querySelector('#chat-message-input');
    const message = messageInputDom.value;
    var messageObject = {
        'username': username,
        'message': message,
        'test': 'abc',
        }
    console.log(messageObject)
    chatSocket.send(JSON.stringify(messageObject));
};

messageObject 似乎格式正确

{username: "jeff", message: "qwerty", test: "abc"}

但是onmessage function 中的 output 只显示

MessageEvent {isTrusted: true, data: "{"message": "qwerty"}", origin: "ws://192.168.1.138:8000", lastEventId: "", source: null, …}

我的其他数据去哪儿了?

这里的问题似乎是我使用的 django 代码要求数据在名为message的变量中传输。 这是一个典型的……小知识……

我熟悉 Python,但对 javascript 很陌生。 因此,当我遇到问题时,我认为问题出在我的 javascript 中,并没有进一步查找。

消费者.py

...
# Receive message from WebSocket
async def receive(self, text_data):
    text_data_json = json.loads(text_data)
    message = text_data_json['message']
...
# Receive message from room group
async def chat_message(self, event):
    message = event['message']
...

下面的代码解决了这个问题:

chatSocket.onmessage = function(e) {
    const data = JSON.parse(e.data);
    messageObject = data.message
    username = messageObject.username
    text = messageObject.text
};

document.querySelector('#chat-message-submit').onclick = function(e) {
    const messageInputDom = document.querySelector('#chat-message-input');
    const text = messageInputDom.value;
    var messageObject = {
        'message': {'username': username, 'text': text, 'test': 'abc'},
        }
    chatSocket.send(JSON.stringify(messageObject));
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM