【问题标题】:how to send string array as a response to ajax call from servlet如何发送字符串数组作为对来自 servlet 的 ajax 调用的响应
【发布时间】:2014-01-16 04:21:54
【问题描述】:

我从我的 jsp 对 servlet 进行了 ajax 调用。当我想返回字符串时,它工作正常。但我想将响应作为字符串数组发送,然后它不起作用。是否可以从 servlet 发送字符串数组作为 ajax 响应。

  String[] roleAccess=null; 
              response.setContentType("text/html");
                         try{
                            roleAccess=new String[23];
                            roleAccess[0]="";
                            roleAccess[1]="checked";
                            roleAccess[2]="";

 response.getWriter().write(roleAccess.toString());---this part I need to change.

【问题讨论】:

  • 以 json 格式发送 ajax 响应。 json.org

标签: javascript ajax servlets


【解决方案1】:

通过将数组编码为json,以json格式发送ajax响应并返回。

您可以使用Gson,然后将您的数组编码为:

String jsonRoleAccess = new Gson().toJson(roleAccess, roleAccess.class);
response.getWriter().write(jsonRoleAccess);

// OR do a one liner:
response.getWriter().write(new Gson().toJson(roleAccess, roleAccess.class));

在 Javascript 端,您可以将其作为 json 对象访问

// Assuming you've read the ajax response into var roleAccess
var checked = roleAccess[1];

【讨论】:

    【解决方案2】:

    您希望将数组编组为 JSON 数据类型。 Java 的数组类返回的格式不是 JavaScript 能理解的格式。

    由于将顶级数组作为 JSON 传回的安全问题,您还应该将数组包装在 Object 中。

    Why are top level json arrays a security risk

    【讨论】:

      【解决方案3】:

      改为将其写入 JSON。 Javascript 无法理解 Java 数组的 toString() 方法 ([Ljava.lang.String;@5527f4f9) 的结果,但我知道它可以理解 JSON。

      如果您只打算使用字符串数组并且不想再使用任何库:

      public static String toJSON(String[] array)
      {
          String json = "[\"";
      
          for (String s : array)
          {
              json += s + "\",\"";
          }
      
          return json.substring(0, json.length() - 2) + "]";
      }
      

      根据您在客户端使用的 Javascript 框架,您的 JSON 将以xmlHttpRequestObject.responseText 的形式提供。 AngularJS 将它存储在 $http.get().success 方法的第一个 data 参数中。 jQuery 将其存储在 $.ajax({success}) 方法的第一个 data 参数中。 Angular 和 jQuery 会自动为您验证并将 eval 验证为 [object Object],但 xmlHttpRequestObject.responseText 不会。

      【讨论】:

        猜你喜欢
        • 2011-03-18
        • 2013-04-15
        • 1970-01-01
        • 2016-03-16
        • 2016-08-31
        • 2011-02-26
        • 1970-01-01
        • 2012-08-21
        • 2021-04-05
        相关资源
        最近更新 更多