2012-04-26 38 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