【问题标题】: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.
【问题讨论】:
标签:
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];
【解决方案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 不会。