2014-01-16 66 views
0

到AJAX調用的響應,我從我的JSP中的Ajax調用的servlet。當我想返回字符串,那麼它工作正常。但我想發送響應作爲一個字符串數組,然後它不工作。有可能我可以從servlet發送字符串數組作爲ajax響應。如何發送字符串數組從servlet的

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. 
+1

以json格式發送ajax響應。 http://www.json.org/ –

回答

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。角和jQuery自動驗證並eval[object Object]你,但xmlHttpRequestObject.responseText沒有。

0

通過編碼在JSON陣列發送Ajax響應在json格式並返回它。

您可以使用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]; 
0

你想馬歇爾數組作爲一個JSON數據類型。 Java數組類所返回的格式不是JavaScript可以理解的格式。

你也應該換一個對象內部的數組,因爲通過頂層陣列早在JSON的安全問題。

請參閱Why are top level json arrays a security risk

相關問題