【发布时间】:2012-06-24 11:35:31
【问题描述】:
我有一个非常大的对象,我需要将它传递给客户端脚本中的函数。我曾尝试使用 JSON.stringify,但在使用这种方法时遇到了一些问题——主要与性能有关。在ejs中可以做这样的事情吗?
app.get('/load', function(req, res) {
var data = {
layout:'interview/load',
locals: {
interview: '',
data: someLargeObj
}
};
res.render('load', data);
});
在我的客户端脚本中,我会将这个对象传递给这样的函数
<script type="text/javascript">
load(<%- data %>); // load is a function in a client script
</script>
当我尝试这个时,我得到了任何一个
<script type="text/javascript">
load();
</script>
或
<script type="text/javascript">
load([Object object]);
</script>
【问题讨论】:
-
JSON.stringify是唯一的方法。 -
@FlorianMargaine,你能告诉我为什么在客户端使用'JSON.stringify()'吗?因为节点会将数据作为对象的形式传递,而 stringify 只会将其转换为字符串,而不是我们需要一个对象,对吗?没有 JSON.stringify() 就不行
-
@Vishal-Lia — 您应该在 EJS 代码中使用
JSON.stringifyserver-side,而不是在传递给浏览器的<script>数据中使用客户端。 -
@Vishal-Lia 您找到问题的答案了吗?下面的答案都没有告诉我们为什么当数据作为实例中的对象传递时我们必须
JSON.stringify。另外,为什么JSON.stringify应该做相反的事情时将其转换为对象?