Heim >Web-Frontend >js-Tutorial >Beispiel für die Übergabe von Array-Parametern durch Jquery Ajax an den Hintergrund
Anforderungen:
Array-Parameter in JS in den Hintergrund übertragen
Analyse:
Arrays in JS sind schwach typisiert und können von jedem Typ (Objekt, Basistyp) sein, aber wenn in array Was eingefügt wird, ist der Objekttyp, der nur die Objektzeichenfolge anzeigt – [object Object]. request.getParameterValues()-Methode Was zurückgegeben wird, ist ein String[], daher sollte die toString()-Methode des Objekts während der Vordergrundübertragung aufgerufen werden. Was ist also, wenn Sie das Objekt trotzdem übergeben möchten? Salat!
Aber es kann mithilfe von JSON-Strings implementiert werden, und die JSON-Strings werden im Hintergrund in JAVA-Objekte analysiert.
Vielleicht möchten Sie sagen, was zu tun ist, wenn es sich um ein zusammengesetztes Objekt handelt, wie zum Beispiel das Folgende:
public class Person { private String username; private String password; private Address addr; }Das Person-Objekt hat ein addr-Attribut vom Typ „Adresse“. Es ist ein Attribut, das letztendlich von jedem Objekt verwendet wird. Die Werte sind alle grundlegende Datentypen und müssen nur mit dem entsprechenden Verpackungstyp parseInt oder parseXXX analysiert werden.
Implementierung:
OK, das ist das Prinzip. Schauen wir uns zunächst an, wie man JS schreibt:
var as = []; var temp = []; for ( var int = 0; int < 5; int++) { temp.push('{"k":'); temp.push(int); temp.push(',"v":'); temp.push(int); temp.push('}'); as.push(temp.join("")); } //Jquery中的方法,具体参考Jquery API $.post( "servlet/AjaxServlet?m=putWarningRule",{"aa":as} );Die letzte Zeichenfolge ist der folgende Stil (nur als Beispiel)
{"k":0,"v":0}Hintergrundempfang, es wird kein Framework besprochen, nur HttpServletRequest Aber
String[] jsonArr = request.getParameterValues("aa[]");Zu beachten ist, dass bei der Übergabe von Parametern in js der Parametername „aa“ lautet, beim Empfang im Hintergrund jedoch „aa[]“. Jquery hätte die Konvertierung hier durchführen sollen, daher ist es am besten, sie in JS in „aa[]“ zu ändern. Der Grund, warum „[]“ hier nicht geschrieben wird, besteht darin, das Problem zu veranschaulichen. Sie können die folgende Methode verwenden, um alle Parameter in der Anfrage auszudrucken
Enumeration<String> names = request.getParameterNames(); while (names.hasMoreElements()) { String string = (String) names.nextElement(); System.out.println(string); }OK. An diesem Punkt ist der Empfang abgeschlossen. Es bleibt nur noch, wie ein JSON-String in ein POJO umgewandelt wird. Ich verwende jsontools-core-1.7.jar. Ich lade es selbst aus der Codebibliothek herunter, importiere den Klassenpfad und schreibe eine einfache Tool-Klasse Methoden:
/** * 将对象转换为JSON格式的字符串 * @param obj * @return 返回JSON字符串 */ public static String toJSONAsString(Object obj){ try { return JSONMapper.toJSON(obj).render(false); } catch (MapperException e) { e.printStackTrace(); } return null; } @SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonStr, Class<T> targetClass) throws TokenStreamException, RecognitionException, MapperException{ JSONValue jv = new JSONParser(new StringReader(jsonStr)).nextValue(); return (T) JSONMapper.toJava(jv,targetClass); } //test public static void main(String[] args) throws Exception { Person p = new Person(); p.setK("a"); p.setV("v"); String json = toJSONAsString(p); Person np = jsonToObject(json,Person.class); System.out.println(np.getK()+"=="+np.getV()); }Nachdem die Anfrage den Wert erhalten hat, durchläuft sie das Array und konvertiert die
Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);Person-Klasse wie folgt:
public class Person { private String k; private String v; public String getK() { return k; } public void setK(String k) { this.k = k; } public String getV() { return v; } public void setV(String v) { this.v = v; } }