传给玉的东西最后是一串

Object passed to jade ends up as string

本文关键字:一串 最后      更新时间:2023-09-26

我想把一个对象从node传递给jade,并在js中使用它。但它最终是[object Object]字符串,我不知道为什么

服务器端

var currentProblem = problemMaker.makeProblem(level);
console.dir(currentProblem); // [ { value: 2, operation: '+' }, {value: 1, operation: '-' } ]
res.render('training', {
    // ...
    Oid             : problemOid,
    problemObject   : JSON.stringify(currentProblem)
});

翡翠

script(type='text/javascript').
    var problemOid = "!{Oid}"  // this WORKS
script(type='text/javascript').
    var problemObj = "!{JSON.parse(problemObject)}"  // this does NOT

(注意,webstorm将"problemObject"标记为未解决的变量,而Oid似乎没有问题)

浏览器js

console.log(typeof problemObj);  // string
console.dir(problemObj);         // [object Object],[object Object]

我试过有字符串/解析和没有字符串/解析,没有区别。我做错了什么?

感谢

解决方案

我通过删除引号并删除任何JSON.xxxx 来实现它

工作代码:

script(type='text/javascript') var problemObj = !{problemObject};

删除逗号并使用JSON.stringify代替JSON.parse

script var problemObj = !{JSON.stringify(problemObject)}; 

这里的主要想法

var str = JSON.stringify({a: 1000}); // returns string "{"a":1000}"
console.log(str); // print {"a":1000}

所以,在你的html中,你会看到

script var str = !{JSON.stringify({a: 1000})}; 
->
<script>
    var str = {"a":1000};
</script>