gpt4 book ai didi

javascript - Node.js 和 Socket.io 如何发出 DOM 对象,尽管这看起来不可能?

转载 作者:行者123 更新时间:2023-12-03 11:16:17 24 4
gpt4 key购买 nike

我最近开始使用 Node.js 和 Socket.io,并且在“emit”套接字功能上遇到一些问题。这是我的代码:

var socket = io.connect(':1337');
function Object(id, urlImg){
this.id = id;
this.image = new Image();
this.image.url = urlImg;
}

var myObject = new Object(1, "img/myImg.jpg");

socket.emit("myEvent", myObject);

我从 socket.io.js 收到此错误:

 Uncaught RangeError: Maximum call stack size exceeded

仅当我从对象中删除 new Image() 时,此代码才有效。所以我尝试过类似的事情:

socket.emit("myEvent", new Image());

socket.emit("myEvent", $("#id"));

或再次

socket.emit("", document.getElementById("id"));

但我有同样的错误消息。因此,如果我尝试直接发送参数中的 DOM 对象,或对象参数中的 DOM 对象,就会出现这个问题。我该如何发出 DOM 对象???

最佳答案

您无法通过 webSocket 发送 DOM 对象。 socket.io 将尝试将对象序列化为 JSON,以便它可以发送该 JSON,并且所有 DOM 对象都包含循环引用,这在正常序列化中将失败。

您应该做的是只获取您需要的属性,发送这些属性,然后在接收端,您可以使用适当的属性构建一个 DOM 对象。

在您的特定示例中,看起来您只需发送 id 和图像 url,然后使用这些属性在其他接收浏览器中构建 DOM 对象。

如果要发送的重要属性位于名为 idurlImg 的变量中,那么您可以执行以下操作:

socket.emit("myEvent", {id: id, url: urlImg});

关于javascript - Node.js 和 Socket.io 如何发出 DOM 对象,尽管这看起来不可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com