2014-10-07 88 views
0

也許這是一個簡單的主題,但我正在努力嘗試,我無法做到這一點。我想將一個字符串轉換爲一個javascript對象。自從現在我嘗試了多種形式來解決它。我正在使用節點,我想創建一個AJAX請求,並且服務器端必須接受請求變量並將其轉換爲javascript對象(以便與其他對象進行擴展)。我告訴你我的代碼是如何:我無法將字符串轉換爲jasvascript對象


客戶

var data = '{"addresses":"hola"}'; 
// make more and more. 
makeTheRequest("POST",'users/update',"param="+JSON.stringify(data),'json',onSuccess, onError); 

服務器

var param = eval('{' + req.body.param + '}'); 
console.log("\nuser.js-> router.post-> eval: " + param); 
console.log("\nuser.js-> router.post-> req.param: " + req.body.param); 
console.log("\nuser.js-> router.post-> JSON.parse: " + JSON.parse(req.body.param)); 
console.log("\nuser.js-> router.post-> user: " + req.session.user); 
/*TODO: save on the database.... and more*/ 
res.send({success:0, error:1, result:"No USER. No SESSION"}); 

最終的服務器日誌導致

user.js-> router.post-> eval: {"addresses":"hola"} 
user.js-> router.post-> req.param: "{\"addresses\":\"hola\"}" 
user.js-> router.post-> JSON.parse: {"addresses":"hola"} 
user.js-> router.post-> user: [object Object] 

我想要做的是調用exentd函數合併兩個對象,如下所示:req.session.user = extend(false,req.session.user,param);,但參數的處理方式類似於字母 - > 1:{,2:「,3:a,4:d,5:d,6:r,7:e,8:s,9:s ... 任何想法,我做錯了什麼? 非常感謝你。

+5

首先,當'data'已經是JSON文本時,爲什麼要調用'JSON.stringify(data)'? – 2014-10-07 16:36:38

回答

2

您作爲JSON 編碼數據的兩倍(在你的榜樣,data是包含JSON字符串),因此你必須解析兩次,更好的解決方案將是一次對其進行編碼,一旦解析它。

事實上,

console.log("\nuser.js-> router.post-> JSON.parse: " + JSON.parse(req.body.param)); 

產生

user.js-> router.post-> JSON.parse: {"addresses":"hola"} 

告訴你的JSON.parse返回值仍然是一個字符串(包含JSON),而不是一個對象。

+0

非常感謝@FelixKing ...我解決了它刪除JSON.stringify(數據),並只讓數據,在調用ajax函數。 – 2014-10-07 17:02:29