2012-12-18 15 views
5

我正在嘗試從我的服務器返回到Java中的AJAX的多個值。現在,我用這個方法,但它不是一個很好的解決方案:使用JSON,jQuery和AJAX和Java返回多個值

的Javascript:

success: function(list) { 
    var firstValue = list[0]; 
    var secondValue = list[1]; 
    var thirdValue = list[2]; 
} 

的Java:

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); 
list.add(infoFirstValue()); 
list.add(infoThirdValue()); 
list.add(infoThirdValue()); 
String glist = gson.toJson(list); 
response.getWriter().write(glist); 

是否有可能返回幾個值或一個對象或其他解決方案?

+1

什麼不好這個解決方案? – ryadavilli

+0

您認爲解決方案的哪一部分不好?這是一個性能問題,還是你覺得你的代碼需要改進?另外,它是您想要改進的Java代碼還是Javascript代碼? –

+0

因爲它不是一個動態代碼。如果有新的列表。例如一個列表beetween infoFirstValue和infoThirdValue,我的代碼JS應該被修改。 –

回答

3

如果有幫助,這裏有一些基於你的代碼片斷,展示瞭如何切換到對象樣式的響應而不是數組。 Gson包括類JsonObject這可能是最簡單的東西供你使用:http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonObject.html

然而,Gson的方式比這更強大 - 你實際上可以直接序列化一個普通的舊Java對象,這可能比將現有數據轉換爲JsonObject的中間步驟(請參閱此現有答案:https://stackoverflow.com/questions/1668862/good-json-java-library/1668951#1668951)。至少,info*Value()方法可能會更好地作爲您正在序列化的對象的方法。而不是將返回的對象屬性存儲爲JavaScript中的函數範圍變量,我認爲您可以傳遞對象並訪問其屬性。

JAVA

JSONObject rv = new JSONObject(); 
rv.add("firstValue", infoFirstValue()); 
rv.add("secondValue", infoSecondValue()); 
rv.add("thirdValue", infoThirdValue()); 

String gobject = gson.toJson(rv); 
response.getWriter().write(gobject); 

JAVASCRIPT

success: function(obj){ 
    var firstValue = obj.firstValue; 
    var secondValue = obj.secondValue; 
    var thirdValue = obj.thirdValue; 
}