2014-10-07 17 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