2012-12-18 13 views
5

Sto provando più valori per tornare dal mio server ad AJAX in Java. Per il momento, io uso questo approccio, ma non è una buona soluzione:Restituisce più valori utilizzando JSON, jQuery e AJAX e 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); 

E 'possibile restituire più valori o un oggetto o un'altra soluzione?

+1

Ciò che non è buona di questa soluzione? – ryadavilli

+0

Quale parte della soluzione ritiene non sia buona? È un problema di prestazioni o credi che il tuo codice debba essere migliorato? Inoltre, è il codice Java o il codice Javascript che vorresti migliorare? –

+0

Perché non è un codice dinamico. Se c'è una nuova lista. Ad esempio un elenco tra infoFirstValue e infoThirdValue, il mio codice JS dovrebbe essere modificato. –

risposta

3

Se aiuta, ecco alcuni frammenti di codice basati sui tuoi sopra, che mostrano come passare a una risposta stile oggetto invece di una matrice. Gson include la classe JsonObject che potrebbe essere la cosa più semplice da utilizzare: http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonObject.html

Tuttavia, la modalità Gson è più potente di quella: in realtà è possibile serializzare direttamente un semplice oggetto Java vecchio, che è probabilmente più elegante di passaggio intermedio di conversione dei dati esistenti in un JsonObject (vedere questa risposta esistente: https://stackoverflow.com/questions/1668862/good-json-java-library/1668951#1668951). Per lo meno, i metodi info*Value() sarebbero probabilmente meglio serviti come metodi di un oggetto che si stava serializzando. E invece di memorizzare le proprietà dell'oggetto restituite come variabili con scope funzionale in JavaScript, presumo che si possa semplicemente passare l'oggetto e accedere alle sue proprietà.

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; 
} 
Problemi correlati