【问题标题】:Howto pass array values via from ejs to Javascript?如何通过从 ejs 到 Javascript 传递数组值?
【发布时间】:2014-03-18 11:23:04
【问题描述】:

我通过 ejs 和 JavaScript 传递一个数组。我可以获取 ejs 内部的值,但不能从 JavaScript 获取。以下是更多信息。

node.js

FileTypes = {"application/octet-stream":20,
                 "audio/mpeg":12,
                 "text/html" :71}
res.render('index.ejs', {FileTypes: JSON.stringify(FileTypes)});

index.ejs

 <script type="text/javascript">

   var FileTypes =  <%=FileTypes%>;
   //Error message on the console - Uncaught SyntaxError: Unexpected token & 

 </script>

有什么想法吗?

【问题讨论】:

  • 填充的是什么?模板系统?像这样的分隔值不是标准 JavaScript 的一部分。
  • 渲染出来的文件是什么样子的?
  • @Diodeus OP 在标题、正文和标签中说:EJS。 github.com/visionmedia/ejs
  • 如果是这种情况,这种注入方法设计用于 HTML,而不是将代码注入 SCRIPT 块。

标签: javascript node.js ejs


【解决方案1】:

在 EJS 中使用 &lt;%= %&gt; 标签会转义输出,因此 {"application/octet-stream": ... } 被转换为 {&amp;quot;application/octet-stream&amp;quot;: ... },导致 JavaScript 如下:

<script type="text/javascript">                                                                                                                                          
  var FileTypes = {&quot;application/octet-stream&quot;:20,&quot;audio/mpeg&quot;:12,&quot;text/html&quot;:71};
</script>

所以,您可以看到“Unexpected token &”的来源。解决办法是使用&lt;%- %&gt;标签,不会转义输出:

<script type="text/javascript">
  var FileTypes = <%- FileTypes %>;
  //      here -----^
</script>

...并且会给你你想要的:

<script type="text/javascript">                                                                                                                                          
  var FileTypes = {"application/octet-stream":20,"audio/mpeg":12,"text/html":71};
</script>             

【讨论】:

  • 是的,这就是我的假设。 FileType 的值应该可以直接使用,但无需对其进行模板化。 EXT 是 JS,这只是一个变量。
猜你喜欢
  • 2016-11-05
  • 2020-08-05
  • 2020-04-22
  • 2012-06-23
  • 2013-01-06
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多