Socket.io 如何发送 JavaScript 对象
Socket.io how to send JavaScript object
如何将带有Socket.io
的JavaScript对象从服务器发送到客户端?我正在使用 Socket.io 作为WebSocket(与.send()
一起发送并与message
事件一起侦听(。当我尝试在服务器端做一些事情时:
var myObject = {
message: 'Hello World!'
}
socket.send(myObject);
在客户端,我只得到这个字符串:[object Object]
您实际上需要发出一个事件:
socket.emit('yourEvent', myObject);
如果使用 .send()
,则只是发送对象的字符串表示形式,这就是出现问题的地方。 请注意,您可以使用 .send()
,但您必须先对对象进行 JSON 编码,然后在接收时对其进行解码。
除非您有特定原因,否则最好使用标准 Socket.IO .emit()
方法,因为它可以为您完成所有这些操作。 这就是它的目的。
我只是使用一些较旧的例子遇到了这个问题。这是我找到的答案:将 0.6 迁移到 0.7+,我在下面重现。
在 v0.6 中,socket.send
会自动将像 {a: 'b'}
这样的对象转换为 JSON。您将使用以下方法将数据发送到客户端:
socket.send({a: 'b'});
虽然这很酷,但它带来了一个根本问题。JSON 不仅对对象进行编码,还对字符串、数字等进行编码!因此,如果您明确声明要传递 JSON,则 API 会更加清晰(因为编码/解码 JSON 会降低性能(。
在 v0.7 中,使用 json
标志:
socket.json.send({a: 'b'});
现在,您还可以在浏览器和服务器之间发出和接收自定义事件:
socket.emit('my_event', {a: 'b'});
事件的参数会自动在 JSON 中编码。
socket.send()
不理解对象,但它喜欢使用JSON。您可以通过以下方式使用:
socket.send(JSON.stringify(myObject));
并使用JSON.parse(json)
将 JSON 解析为对象。
尝试在服务器端使用它
socket.json.send({ your : 'data' });
以及客户端的JSON.parse()
方法。
在 socket.io V4.x 中,不需要使用 JSON.stringify()
:
没有必要在对象上运行 JSON.stringify((,因为它会为你完成。
例如
// BAD
socket.emit("hello", JSON.stringify({ name: "John" }));
// GOOD
socket.emit("hello", { name: "John" });
有关此链接的更多信息。
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值