2013-12-13 45 views
0

我正在使用Node JS和Express。使用节点JS与客户端共享变量

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

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

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

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

A“黑客”是创建一个隐藏的元素,并存储在它的价值...

回答

1

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

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

然后你可以在没有额外的HTTP请求的情况下取回它的客户端。稍微比你提到的黑客更清洁。

1

有其在权衡是否要使用AJAX VS隐藏元素几个因素。

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

使用隐藏元素的好处是,您将占用较少的HTTP请求/响应来加载单个页面。如果您只需要加载用户名称,或简短的传记和一些链接,则应将其与模板一起加载。但是,如果您需要加载所有用户最新博客帖子的结果,则应该使用AJAX进行此操作。使用隐藏元素更容易实现,但单独无法实时更新。另外,一个侧面说明,这不是“hackish”。 jQuery对很多事情都是这样做的,比如元素之间的动画,或者只是隐藏非活动标签的jQuery-UI标签。这基本上是隐藏元素的预期目的。

这个问题不应该使用哪个问题,而应该针对每个特定的目的使用哪种技术。考虑这些利弊,你应该走在正确的道路上。当你不需要AJAX时,你可能不应该这样做。过度使用可能会造成浪费。

+0

问问你自己。你的变量是否改变,用户是否需要知道它是否实时?变量是否需要一段时间才能加载或发送给客户端?如果是,那么考虑AJAX。 – tsturzl