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

标签 javascript node.js sockets object socket.io

我最近开始使用 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/

相关文章:

javascript - P5.Js - 如何在特定 x 值的 while 循环中更改 line() 颜色?

node.js - 如何在 Azure Bot 服务上同时使用英语和法语 QnaMaker?

javascript - 从授权码google oauth2获取刷新 token

Ruby Web 服务器在尝试解析 HTTP 请求时挂起

javascript - 带选项的 Stripe 自定义结帐

javascript - 从键/值对字符串设置环境变量

node.js - 如何对池连接进行单元测试?

c - 套接字编程中的 bzero

c - 为什么我在 netstat/ifconfig 中看不到服务器正在运行?

javascript - 通过 JavaScript 动态添加表单操作时,C# MVC 未调用正确的操作方法