2012-07-06 182 views
1

在javascript中我建立了一個這樣的串...評估和演示引用錯誤

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: " + userName + "}"; 

這是後來接通像這樣eval語句...

var obj = eval('(' + txt + ')'); 

當這發生的事情我得到一個參考錯誤,說明用戶名變量的值是未定義的。

有誰知道這個的原因?我失蹤了嗎?

+4

是否有你沒有使用['JSON.parse']的原因(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/parse)而不是'eval'? – 2012-07-06 15:30:18

+2

'eval('('+ txt +')')'?但是,無論如何,'userName'的定義在哪裏? – raina77ow 2012-07-06 15:30:40

+0

這是在一箇舊的黑莓手機上運行,​​其中json.parse不起作用。 – 2012-07-06 15:32:20

回答

1

你周圍的用戶名變量的缺失報價:

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: '" + userName + "'}"; 

我假設你想要的用戶名的字符串值存儲在您的用戶名變種iable。由於沒有引用它,因此將用戶名的值視爲變量。因此,例如,如果用戶名是「testValue123」,它會是userName: testValue123而不是userName: 'testValue123'

0

相反的eval(),我會建議使用$.parseJSON()方法,如果jQuery是可用的:

的jQuery:

$(function(){ 
    var userName = 'me'; 

    var txt = '{"authenticationToken": 1, "authenticated": 2, "authenticationTokenExpiry": 3, "sessionTimeoutMinutes": 4, "userName": "' + userName + '"}'; 

    var obj = $.parseJSON(txt); 
}); 

注:該字符串必須進行修改,以滿足的要求格式正確的JSON字符串

演示:http://jsfiddle.net/WTC7k/

但是,你遇到的是的userName值爲undefined錯誤的原因是,你必須用引號括起來的字符串允許的eval()正常工作:

var userName = 'me'; 

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: '" + userName + "'}"; 

var obj = eval('(' + txt + ')'); 

演示: http://jsfiddle.net/9rtgK/

+0

是的,這將是理想的,但令人遺憾的是,這個代碼是針對舊版本的黑莓應用程序。 JSON.parse不可用。 – 2012-07-09 07:27:18