我正在尝试使客户端 javascript 可以访问一个变量(最终将替换为从数据库中选择的更复杂的 json)。我想在呈现页面而不是 ajax 调用时加载它,并且它不会通过像 ejs 这样的模板呈现(我想将数据传递给组合框的 extjs 存储)。所以我有一个标准的回应:
function (req, res) {
res.render('index.html', {foo: ['a','b']});
}
还有一个我想访问 foo 的空白 html 页面:
<!DOCTYPE html>
<html>
<head>
<script type=text/javascript>
console.log(foo);
</script>
</head>
<body>
</body>
</html>
有什么想法吗?我想过也许可以通过 res.send() 编写整个 html 页面(它比上面的例子多了一些东西)但这似乎是一种解决方法,应该是显而易见的事情......
最佳答案
假设您在上面的问题中使用了相同的数组 foo
,您可以通过以下几种方法来做到这一点。
这个使用 EJS 过滤器来编写数组文字:
<script type="text/javascript">
var foo = ['<%=: foo | join:"', '" %>'];
</script>
这个将它编码为 JSON,稍后由您的客户端 javascript 解析:
<script type="text/javascript">
// note the "-" instead of "=" on the opening tag; it avoids escaping HTML entities
var fooJSON = '<%-JSON.stringify(foo)%>';
</script>
IIRC,ExtJS 可以直接处理 JSON 作为它的数据。如果没有,那么您可以先使用其 JSON 解析器,然后将其传递给局部变量。如果您没有使用 ExtJS,您可以使用它在客户端进行解析:https://github.com/douglascrockford/JSON-js
如果您选择将其编码为 JSON,这也会让以后切换回 AJAX 来检索数据变得更加容易。在某些情况下,这会有优势。该页面可以加载并显示一些数据,并在您正在为其加载数据的元素上显示一个忙碌的图标。
这并不是说在原始请求中包含所有数据本身就存在任何错误。只是坚持使用 JSON 可以让您在以后灵活选择。
关于javascript - res.render() 的目标中可用的 node.js javascript var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324747/