2012-02-13 212 views
13

我完全失去了这一点;我使用NodeJS来获取JSON,我需要将该变量传递给我的页面并让JavaScript使用这些数据。ExpressJS变量传递给JavaScript

app.get('/test', function(req, res) { 
    res.render('testPage', { 
     myVar: 'My Data' 
    }); 

这是我的Express代码(测试非常简单);现在用JADE我要收集这些数据,我知道在页面上呈现为根本

p= myVar 

但我需要能够聚集在JavaScript的这个数据(如果可能.js文件内),但现在只是在一个警告框,我已经试过

alert(#{myVar}) 

和很多人一样,如果有人能帮助非常感激

+0

我不太了解Node.JS或表达,但我认为你应该改变你的testPage模板以包含一个值myVar – 2012-02-13 23:04:11

+0

,但也许Express有手段从中抽象出我们 – 2012-02-13 23:04:48

+0

如果您使用Jade,Moustache或其他模板传递HTML,如果您传递数据,则使用JSON,如果响应为Content-Type:application/json,则让您的传输将它解析为对象。 – 2012-02-13 23:43:23

回答

10

尝试以下操作:

alert('!{myVar}') 

这是一个好主意,JSON的数据进行编码,如果是比只是一个字符串更多。

alert('!{JSON.stringify(myVar)}') 
+0

这解决了我的问题,谢谢你的帮助;为了通过一个。但是js文件只需要在.jade文件中创建变量,然后.js再次接收它 – 2012-02-14 11:36:04

3

好,使用Javascript(和V8)有一个内置的函数从渲染JSON显示变量对象,而JSON恰好与Javascript兼容。

所以,最简单的方法做你想要做的是:

<script type="text/javascript>var myVar = #{JSON.stringify(myVar)};</script> 

而且,是的,你可以在玉模板中使用HTML。

-1

你可以利用Now.js这一点。它很容易让你实时共享变量客户端/服务器端。

检查出来:http://www.nowjs.com/

11

为蒂莫西说:

<script type="text/javascript>var myVar = #{JSON.stringify(myVar)};</script> 

这也可以做,如果你不喜欢在玉模板编写HTML如下的:

script 
    var myVar = !{JSON.stringify(myVar)}; 
    var myVar2 = !{JSON.stringify(myVar2)}; 

更新:对于快递4使用script.代替script使之呈现为JavaScript的,而不是HTML。