2014-10-07 1 views
0

Возможно, это легкая тема, но я стараюсь и пытаюсь, и я не могу этого сделать. Я хочу преобразовать строку в объект javascript. С тех пор я попробовал несколько форм для его решения. Я работаю с узлом, и я хочу сделать запрос AJAX, а серверная сторона должна принять переменные запроса и преобразовать в объект javascript (чтобы сделать расширение с othe объектом). Я покажу вам, как мой код:Я не могу преобразовать строку в объект jasvascript


Client

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

Прежде всего, почему вы вызываете 'JSON.stringify (data)' когда 'data' уже является текстом JSON? –

ответ

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. –

Смежные вопросы