Maison > interface Web > js tutoriel > Explication détaillée du code de jquery ajax passant des tableaux en arrière-plan et comment recevoir des tableaux en arrière-plan

Explication détaillée du code de jquery ajax passant des tableaux en arrière-plan et comment recevoir des tableaux en arrière-plan

伊谢尔伦
Libérer: 2017-07-17 14:06:26
original
3120 Les gens l'ont consulté

Les tableaux en JS sont faiblement typés et peuvent contenir n'importe quel type (objet, type de base). Cependant, si le tableau contient un type d'objet, seuls les objets seront affichés lorsqu'ils seront passés en arrière-plan String --[object Object], la raison est la suivante :

Lors de la réception en arrière-plan, vous ne pouvez utiliser que request pour recevoir. La méthode request.getParameterValues() renvoie une String[], donc, il devrait être que la méthode toString() de l'objet soit appelée lors de la transmission au premier plan, et si vous souhaitez toujours transmettre l'objet ? Mais il peut être implémenté à l'aide de chaînes JSON, et les chaînes JSON sont analysées en objets JAVA en arrière-plan.

Peut-être souhaitez-vous dire quoi faire s'il s'agit d'un objet composite, comme ce qui suit :

public class Person { 
private String username; 
private String password; 
private Address addr; 
}
Copier après la connexion
Il y a un attribut addr de type Address dans l'objet Person. La valeur d'attribut finalement utilisée par tout objet est le type de données Basic

qui doit uniquement être analysée à l'aide du type d'emballage correspondant parseInt ou parseXXX.
Mise en œuvre : OK, c'est le principe. Voyons d'abord comment écrire du JS :

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} );
Copier après la connexion
La chaîne finale est le style suivant, (juste par exemple)

{"k":0,"v":0}
Copier après la connexion
Réception en arrière-plan, aucun framework n'est discuté, seulement HttpServletRequest est nécessaire. Mais

String[] jsonArr = request.getParameterValues("aa[]");
Copier après la connexion
Une chose à noter est que lors du passage de paramètres dans js, le nom du paramètre est "aa", mais lorsqu'il est reçu en arrière-plan, il est "aa[]". Jquery aurait dû effectuer la conversion ici, donc le meilleur moyen est de le changer en "aa[]" dans JS. La raison pour laquelle "[]" n'est pas écrit ici est pour illustrer le problème. Vous pouvez utiliser la méthode suivante pour imprimer tous les paramètres de la requête

Enumeration<String> names = request.getParameterNames(); 
while (names.hasMoreElements()) { 
String string = (String) names.nextElement(); 
System.out.println(string); 
}
Copier après la connexion
OK À ce stade, la réception est terminée. Il ne reste plus qu'à convertir une chaîne JSON en POJO.

/** 
* 将对象转换为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()); 
}
Copier après la connexion
Une fois que la requête a obtenu la valeur,

parcourt le tableau et se convertit un par un en classe

Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);
Copier après la connexion
Person comme suit :

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; 
} 
}
Copier après la connexion
Parfois, un problème surviendra, la valeur ne peut pas être reçue en arrière-plan.

Solution :


Définissez l'attribut traditionnel de jQuery.ajax

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

Paramètre de requête 2

Ceci Le paramètre secondaire ne contient pas "[]" et le tableau peut être reçu avec succès en arrière-plan.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal