使用Node JS与客户端共享变量

时间:2013-12-13 19:44:29

标签: javascript ajax node.js

我正在使用Node JS和Express。

目前,在服务器端,我将某个变量(来源)传递给我的EJS模板,并使用其中的一部分来填充页面上的列表。

当用户点击该列表中的某个项目时,我需要获取此变量的另一部分。

我知道我可以再次使用AJAX服务器获取变量(来源),并解决我的问题。但这似乎是不必要的,因为我在模板生成HTML时已经有了变量。

通常的做法是什么?人们使用AJAX并获取变量,还是有一些很好的方法可以在服务器构建时将它存储在页面中?

“hack”将创建一个隐藏元素并将值存储在其中......

3 个答案:

答案 0 :(得分:1)

这样做的一种方法是将数据服务器端作为JavaScript变量注入EJS

<script>var x = <%server data%></script> 

然后您可以在不进行额外HTTP请求的情况下获取客户端。比你提到的黑客更清洁。

答案 1 :(得分:1)

有几个因素会影响是否使用AJAX与隐藏元素。

使用AJAX的优点是您可以加载页面模板,以及允许浏览器在客户端检索动态内容之前呈现页面的所有静态内容。如果您需要从数据库加载内容或计算输出,这将提供一个优势。基本上,优点是如果你正在加载大的东西,或者可能需要一些东西来检索,你应该在加载页面后使用AJAX以允许用户等待更少的时间来查看结果。另一个优点是您可以实时显示结果,并且可以向客户端提供进度报告(例如进度条),或者您可以在从源(db,google,facebook等)加载搜索结果时实时加载搜索结果)。

使用隐藏元素的优点是,您将占用较少的HTTP请求/响应来加载单个页面。如果您只需要加载用户名,或简短的传记和一些链接,您应该使用模板加载它。但是如果您需要加载所有用户最新博客帖子的结果,您应该使用AJAX。使用隐藏元素更容易实现,但不能单独实时更新。另外,请注意,这不是“hackish”。 jQuery是为许多事情做的,比如元素之间的动画,或jQuery-UI选项卡,它们只隐藏非活动选项卡。这基本上是隐藏元素的预期目的。

问题不应该是使用哪个,而是何时为每个特定的预期目的使用这两种技术。考虑一下这些优点和缺点,你应该走在正确的道路上。当你不需要AJAX时,你可能不应该。如果过度使用会变得浪费。

答案 2 :(得分:0)

可能你需要这个 - 使用局部变量进行响应,用于渲染http://expressjs.com/api.html#res.locals