node.js javascript var在res.render()的目标中可用
我试图做一个variables(最终被从数据库中select更复杂的JSON取代)可访问的客户端JavaScript。 我想加载它时,页面呈现,而不是一个Ajax调用,它不会通过模板像ejs(我想传递数据到一个combobox的extjs存储)呈现。 所以我有一个非常贴心的回应:
function (req, res) { res.render('index.html', {foo: ['a','b']}); }
和一个空白的html页面我想访问foo:
<!DOCTYPE html> <html> <head> <script type=text/javascript> console.log(foo); </script> </head> <body> </body> </html>
有任何想法吗? 我想通过res.send()(这比上面的例子有更多的东西)编写整个HTML页面,但似乎这样的解决方法,应该是显而易见的做…
假设在上面的问题中相同的数组foo
,这里有几个方法可以做到这一点。
这一个使用EJSfilter来写一个数组文字:
<script type="text/javascript"> var foo = ['<%=: foo | join:"', '" %>']; </script>
这一个编码为JSON,以后由您的客户端JavaScriptparsing:
<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作为其数据。 如果不是,那么你可以先使用它的JSONparsing器,然后把它交给一个局部variables。 如果你不使用ExtJS,你可以用它来parsing客户端: https : //github.com/douglascrockford/JSON-js
如果您select将其编码为JSON,则可以使其稍后切换回AJAX来检索数据。 在某些情况下,这将有一个优势。 该页面可能会加载和显示一些数据,以及正在加载数据的元素上的繁忙图标。
这并不是说在原始请求中包含所有的数据都会有内在的错误。 这只是坚持与JSON给你以后select的灵活性。
在EJS中以下应该工作
<script type=text/javascript> console.log( <%= foo %>); </script>
我build议不要dynamic生成JavaScript,因为它会打破问题的分离并强制JavaScript。
编辑:
原来上面的数组很好地工作。 所以简单地把你的数据编码成语义HTML。 然后用JavaScript来增强它。 如果JavaScript必须获取数据,然后将其存储在更加合理的地方,比如cookie,或者通过ajax检索。