2012-04-26 40 views
0

我读到nowjs支持传递对象以及字符串,但由于某种原因,我遇到了问题。这是从他们的只是一个字符串网页上的nowjs例子越来越解析各地和工作为我好,在Nowjs中使用回调参数传递对象

客户端

now.test('foo', function(msg){ 
     console.log(msg); 
    }); 

服务器端

everyone.now.test = function(val, callback){ 
    callback(val + ' bar!'); 
} 

下面的代码我试图通过并以val为对象,

客户端

now.test('default', function(msg){ 
     console.log(Object.keys(msg)); 
     console.log(msg.GetEthernet()); 
    }); 

服务器端

everyone.now.test = function(val, callback){ 
    var profile = honeydConfig.GetProfile(val); 
    console.log("Got eth " + profile.GetEthernet() + " for profile " + profileName); 
    callback(profile); 
} 

在服务器端,它打印GetEthernet功能的正确的输出。在客户端它只是说:“Uncaught TypeError:Object#没有方法'GetEthernet'”并返回Object.keys的空数组。“

回答

2

我没有使用nowjs,但我会很惊讶如果它可以发送full服务器和客户端之间的JavaScript对象 - 也就是具有原型链和方法的对象。无论使用什么框架,在客户端和服务器之间传递的对象都需要被串行化为字符串;在这种情况通常意味着JSON序列化,如果nowjs文档说你可以传递一个对象,它们可能是一个普通的JavaScript对象,一个是JSON序列化的,否则你必须序列化对象方法并将它们发送给由客户重新解释,除了最微不足道的方法外,这对所有人都没有任何意义。

长话短说,尝试通过profile.GetEthernet()的输出,而不是通过profile并调用该方法。如果您需要传递更多有关profile的数据,则可以使用各种方法输出创建对象并发送该对象。

+0

就是这样。在服务器端添加“profile.ethernet = profile.GetEtherent()”,它工作。显然它可以发送对象的成员变量而不是方法,这是有道理的。谢谢! – PherricOxide 2012-04-26 17:35:10