2014-12-06 43 views
0

我最近开始使用Node.js和Socket.io,并且在“发送”套接字函数时遇到了一些问题。 这里我的代码:Node.js和Socket.io我怎么能发射DOM对象,而它似乎不可能?

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对象?

+0

为什么你就不能只发送图像网址是什么? – 2014-12-06 17:28:51

回答

1

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

你应该做的只是抓住你需要的属性,发送这些属性,然后在接收端,你可以在那里建立一个DOM对象,并有相应的属性。

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

如果重要的性能派的变量命名idurlImg,那么你可以这样做:

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

谢谢我已经这样做了,它效果很棒!我注意到我也不能发送对象方法,我不知道为什么!当我将它发送到另一个套接字时,我必须将函数重新赋给我的对象:/。我认为这也是不可能的?谢谢 :) – 2014-12-08 08:57:35