我正在使用socket.io,我试图从我的服务器发出一个事件,并传递一个带有函数作为参数的对象。这是我的代码:
socket.emit('customEvent', {
name : "Test".
myFunc : function() {
//some logic here
}
});
然后在客户端(我的浏览器中的应用程序)我可以访问'name'属性,但是当我尝试访问'myFunc'但我得到'undefined'时。这是我的代码
socket.on('customEvent', function(data){
data.myFunc();
});
这方面的正确方法是什么(如果可能的话)?
答案 0 :(得分:4)
数据以JSON格式传输,因此不能包含函数。也许你正在寻找socket.io's documentation中所谓的'致谢'?
// server
socket.on('customEvent', function (data, fn) {
fn(data.x)
})
// client
socket.emit('customEvent', { x: 1 }, function(){
// ...
})
答案 1 :(得分:0)
您可以序列化您的功能,也许这对某些功能来说是危险的。但是socket.io只将字符串作为纯字符串或JSON传输。从服务器端接收时,您可以尝试使用eval字符串函数。
注意:以下未测试的代码:
function hello() {
return "Hello Cruel World";
}
socket.emit('send-function', { myFunc : hello.toString() });
...
在服务器端:
socket.on('send-function', data) {
console.log(eval(data.myFunc));
}
尝试使用此代码,如果有效,请向我们提供反馈。