将服务器端数据传递给JavaScript——Scripplet或AJAX调用——这更好
Passing server side data to JavaScript - Scriplet or AJAX call - which is better?
在服务器端的属性文件中,我维护一个逗号分隔的单词列表。
words.for.js=some,comma,separated,words
我想用这些单词创建一个JavaScript数组。
var words = [some,comma,separated,words];
我想到了两个选项
1.使用JSP脚本,创建一个全局变量
<%
out.print("<script> var words = [");
out.print( PropertyLoader.getAsCommaSeparated("words.for.js") );
out.print(" ] </script>");
%>
2.公开一个服务/操作(即/getWords.do),并使用AJAX调用它并构造数组。
我不确定两者中哪一个更好,很感激你在这里的想法。或者有更好的方法吗?
谢谢。
编辑:
这也是全局JS变量(在选项1的情况下)与额外http请求(在选项2的情况下,哪一个更糟)的比较。我也想从这个角度了解你的想法。
我更喜欢在JSP的标记#1中嵌入服务器端数据。它速度更快,不需要回调。
对我来说,这一切都与数据的性质有关。在您的情况下,如果不重新启动服务器,该属性文件中的数据似乎不太可能更改。因此,保存一个额外的网络回调并将其嵌入到标记中对于全局变量来说是合适的。
如果您正在处理某种动态数据,那么ajax回调onload会更好。
通过http请求进行公开将是最优雅的选项,并允许刷新。无论如何,你已经指望浏览器有javascript了。
此外,如果值不是动态的,为什么不首先提供一个带有数组的静态javascript文件呢?
为什么不使用JSON?因为您只需要向前端发送一些字符串。类似这样的东西:
String [] s = {"test","test1"};
JSONArray array = new JSONArray();
array.put(s);
request.setAttribute("test", array);
JSP
<script>
var array='${test}'
</script>
更新
您应该将您的配置放在servlet上下文中,因为它在整个web应用程序中都被访问,包括在jsp文件&在重新启动应用程序之前,也不会更改。
ServletContext context = getServletContext();
Properties prop= new Properties();
prop.load(context.getResourceAsStream("/WEB-INF/filename.properties"));
String[]configArray= prop.get("words.for.js").toString().split(",");
context.setAttribute("configArray", myConfigArray);
或者如果您使用ServletContextListener
ServletContext ctx = servletContextEvent.getServletContext();
ctx.setAttribute("configArray", myConfigArray);
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在php文件中获取$.post-ajax传递的值
- Replacing $ .ajax?
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- Ajax发布表单序列化,发布引号'
- 通过Ajax将JavaScript函数传递给PHP文件
- ajax请求的顺序总是不同的
- 可以't使用Polymer's的核心ajax
- Ajax Live搜索发布到Laravel视图
- Ajax聊天消息重复而不仅仅是更新
- 从控制器返回后Ajax启动事件激发
- PHP AJAX图片上传示例不上传
- 从ajax请求中获取javascript对象
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 如何在Javascript中解析AJAX数组的特定部分
- Ajax文件加载和<输入>文件加载
- Javascript/jQuery中的并行Ajax调用
- Ajax-如何获取数据
- 将服务器端数据传递给JavaScript——Scripplet或AJAX调用——这更好