0

I read that nowjs supports passing objects around as well as just strings, but for some reason I'm having problems with it. This is the nowjs example from their webpage with just a string getting parsed around and working fine for me,

Client Side

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

Server Side

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

The following code I try to pass and object for the val instead,

Client Side

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

Server Side

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

On the server side, it prints the correct output of the GetEthernet function. On the client side it just says, "Uncaught TypeError: Object # has no method 'GetEthernet'" and returns an empty array for Object.keys".

4

1 に答える 1

2

私はnowjsを使用していませんが、サーバーとクライアント間で完全なJavaScriptオブジェクト、つまりプロトタイプチェーンとメソッドを持つオブジェクトを送信できるとしたら非常に驚きます。使用しているフレームワークに関係なく、クライアントとサーバー間で渡されるオブジェクトは文字列としてシリアル化する必要があります。JavaScriptの場合、これは通常JSONシリアル化を意味します。nowjsドキュメントにオブジェクトを渡すことができると記載されている場合、それらはおそらく、JSONでシリアル化可能なプレーンなJavaScriptオブジェクトを意味します。それ以外の場合は、オブジェクトメソッドをシリアル化して送信し、クライアントが再解釈できるようにする必要があります。これは、最も些細なメソッド以外には意味がありません。

簡単に言うと、メソッドを渡して呼び出すのprofile.GetEthernet()ではなく、の出力を渡してみてください。profileについてさらにデータを渡す必要がある場合はprofile、さまざまなメソッド出力を使用してオブジェクトを作成し、それを送信できます。

于 2012-04-26T01:30:29.223 に答える