如何发送字符串数组作为对来自servlet的ajax调用的响应

时间:2014-01-16 04:21:54

标签: javascript ajax servlets

我从jsp到servlet进行了ajax调用。当我想要返回字符串然后它工作正常。但我想将响应作为String数组发送然后它不起作用。我是否有可能从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.

3 个答案:

答案 0 :(得分:0)

将其写入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没有。

答案 1 :(得分:0)

通过在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 :(得分:0)

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

您还应该将数组包装在Object中,因为将顶级数组作为JSON传递回来会出现安全问题。

请参阅Why are top level json arrays a security risk