Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Code-Erklärung der JQuery-Ajax-Übergabe von Arrays an den Hintergrund und des Empfangs von Arrays im Hintergrund

Detaillierte Code-Erklärung der JQuery-Ajax-Übergabe von Arrays an den Hintergrund und des Empfangs von Arrays im Hintergrund

伊谢尔伦
伊谢尔伦Original
2017-07-17 14:06:263080Durchsuche

Arrays in JS sind schwach typisiert und können jeden Typ enthalten (Objekt, Basistyp). Wenn das Array jedoch einen Objekttyp enthält, werden bei der Übergabe an den Hintergrund String --[object Object], der Grund ist wie folgt:

Beim Empfang im Hintergrund können Sie nur request zum Empfangen verwenden. Die Methode request.getParameterValues() gibt einen String[] zurück. Es sollte also so sein, dass die toString()-Methode des Objekts während der Vordergrundübertragung aufgerufen wird. Was ist also, wenn Sie das Objekt trotzdem übergeben möchten? Es kann jedoch mithilfe von JSON-Strings implementiert werden, und die JSON-Strings werden im Hintergrund in JAVA-Objekte geparst.

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 enthält ein addr-Attribut vom Typ „Adresse“. Der letztendlich von jedem Objekt verwendete Attributwert ist der Basisdatentyp

und muss 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:

Die letzte Zeichenfolge ist der folgende Stil (nur als Beispiel)
var as = []; 
var temp = []; 
for ( var int = 0; int < 5; int++) { 
temp.push(&#39;{"k":&#39;); 
temp.push(int); 
temp.push(&#39;,"v":&#39;); 
temp.push(int); 
temp.push(&#39;}&#39;); 
as.push(temp.join("")); 
} 
//Jquery中的方法,具体参考Jquery API 
$.post( "servlet/AjaxServlet?m=putWarningRule",{"aa":as} );

Hintergrundempfang, es wird kein Framework besprochen, nur HttpServletRequest Aber
{"k":0,"v":0}

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
String[] jsonArr = request.getParameterValues("aa[]");

OK. An diesem Punkt ist der Empfang abgeschlossen. Es bleibt nur noch, wie ein JSON-String in ein POJO umgewandelt wird.
Enumeration<String> names = request.getParameterNames(); 
while (names.hasMoreElements()) { 
String string = (String) names.nextElement(); 
System.out.println(string); 
}

Nachdem die Anfrage den Wert erhalten hat, durchläuft
/** 
* 将对象转换为JSON格式的字符串 
* @param obj 
* @return 返回JSON字符串 
*/ 
public 
static
 String toJSONAsString(Object obj){ 
try { 
return JSONMapper.toJSON(obj).render(false); 
} catch (Mapper
Exception
 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()); 
}
das Array

und konvertiert eine nach der anderen in die

Person-Klasse wie folgt:
Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);

Manchmal tritt ein Problem auf, der Wert kann im Hintergrund nicht empfangen werden.
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; 
} 
}

Lösung:


Tradional-Attribut von jQuery.ajax festlegen

$.ajax({
  url: "/xxx",
  type: "GET",
  data: {
    "boxIds": boxIds,
    "boxType": 0,
    "time": new Date().getTime()
  },
  traditional: true,//这里设置为true
  success: function(data) {
    //do sth...
  }
});
Parameter anfordern

2Dies Der sekundäre Parameter enthält nicht „[]“, und das Array kann erfolgreich im Hintergrund empfangen werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Code-Erklärung der JQuery-Ajax-Übergabe von Arrays an den Hintergrund und des Empfangs von Arrays im Hintergrund. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn