2012-04-26 7 views
0

nowjsはオブジェクトを文字列だけでなく周囲に渡すこともサポートしていますが、何らかの理由で問題が発生しています。これは、周りに解析されたばかり単なる文字列で自分のWebページからnowjsの一例であり、私のために正常に動作し、Nowjsでコールバック引数を持つオブジェクトを渡す

クライアント側

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

サーバー側

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

私が合格しようとする次のコード代わりにvalのオブジェクトです。

クライアント側

サーバー側では3210

サーバー側

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を使用していませんが、私は非常に驚いていますサーバーとクライアントの間のJavaScriptオブジェクト(つまり、プロトタイプのチェーンとメソッドを持つオブジェクト)。使用しているフレームワークに関係なく、クライアントとサーバーの間で渡されるオブジェクトは、文字列としてシリアル化する必要があります。 JavaScriptの場合、これは通常JSONのシリアル化を意味します。nowjsドキュメントでは、オブジェクトを渡すことができると言うと、JSONシリアライズ可能なプレーンなJavaScriptオブジェクトを意味するでしょう。そうでなければ、オブジェクトメソッドをシリアル化してクライアントによって再解釈されますが、これは最も単純な方法以外のすべてに対して意味をなさないでしょう。

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

+0

それでした。サーバー側に「profile.ethernet = profile.GetEtherent()」を追加しました。明らかに、オブジェクトのメンバ変数は送信できますが、メソッドは送信できません。これは理にかなっています。ありがとう! – PherricOxide

関連する問題