2014-02-18 59 views
0

我有一個寫在客戶端的函數,以字符串的形式發送到服務器,並在那裏執行。 在這個函數裏我使用了客戶端的一些原始的變量。一個例子可以是函數定義中變量的硬編碼值

function (obj){ 
    return obj.number == aNumber; 
} 

其中aNumber是在客戶端側的整數變量,而obj是生活在服務器上的對象。

問題是,在服務器上執行的功能,服務器沒有任何aNumber變量,所以我想要做的是用他的實際價值取代aNumber,但我不知道如何要做到這一點,因爲該函數的代碼實際上從未在客戶端上執行過。

有沒有解決方案(可能不涉及解析函數作爲字符串)?

這似乎是一個微不足道的問題,但我根本找不到解決方案。

+0

您正在向執行的服務器發送任意代碼?我會在那裏停下來。看起來像一個可怕的想法。 – deceze

+0

我會使用模板引擎,例如[下劃線](http://underscorejs.org/#template)。 –

+0

@ T.J.Crowder對不起,我錯了,我正確。 deceze:是的,從安全的角度來看這很糟糕,但是對我來說這件事還是沒有。 – user1544128

回答

1

由於aNumber只存在於客戶端,這是唯一可以做到這一點的地方。

你可以做一個替代(客戶端):

var functionString = theFunction.toString(); 
functionString = functionString.replace(/\baNumber\b/g, aNumber); 

...然後發送​​到服務器。假設這段代碼運行在可以訪問aNumber的上下文中,因爲函數被轉換爲字符串;而那aNumber確實是一個數字。

但這是一個認真壞主意。從細節開始回顧並查看更廣泛的圖片,我是當然有一種解決方案,不涉及向服務器發送功能以便在那裏執行。

+0

有,但現在我只想測試一些東西,我認爲這是最快的方法。這似乎並非畢竟。 – user1544128

+0

@ user1544128:好的,上面應該讓你這樣做,在一個受控的環境中。 :-) –

+0

是的,但功能比這個更詳細一點:) – user1544128