【问题标题】:Passing server side data to JavaScript - Scriplet or AJAX call - which is better?将服务器端数据传递给 JavaScript - Scriplet 或 AJAX 调用 - 哪个更好?
【发布时间】:2015-03-25 18:50:11
【问题描述】:

在服务器端的属性文件中,我维护着一个逗号分隔的单词列表。

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 的情况下)的比较——哪个更糟。我也想从这个角度了解你的想法。

【问题讨论】:

    标签: java javascript ajax jsp scriptlet


    【解决方案1】:

    我更喜欢将服务器端数据嵌入到 JSP 的标记中 - #1。它更快,不需要回调。

    对我来说,这完全取决于数据的性质。在您的情况下,如果不重新启动服务器,该属性文件中的数据似乎不太可能发生变化。因此,保存一个额外的网络回调并将其嵌入到标记中感觉适合全局变量。

    如果您要处理某种动态数据,ajax 回调 onload 会更好。

    【讨论】:

      【解决方案2】:

      通过 http 请求公开将是最优雅的选择,并且允许刷新。无论如何,您已经指望浏览器拥有 javascript。

      另外,如果值不是动态的,为什么不首先提供带有数组的静态 javascript 文件?

      【讨论】:

        【解决方案3】:

        为什么不使用 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);
        

        【讨论】:

        • 可能数组是动态的。他问的是如何将数组发送到前端,而不是如何访问它。
        猜你喜欢
        • 2011-09-12
        • 1970-01-01
        • 2021-03-19
        • 2019-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多