Maison >interface Web >js tutoriel >Exemple de jquery ajax passant les paramètres du tableau en arrière-plan

Exemple de jquery ajax passant les paramètres du tableau en arrière-plan

高洛峰
高洛峰original
2017-01-09 14:28:211164parcourir

Exigences :
Transférer les paramètres du tableau en arrière-plan dans JS

Analyse :
Les tableaux en JS sont faiblement typés et peuvent être de n'importe quel type (objet, type de base), mais si dans le array Ce qui est mis est le type d'objet. Lorsqu'il est passé en arrière-plan, seule la chaîne de l'objet est affichée - [object Object]. Les raisons sont les suivantes :
Lors de la réception en arrière-plan, vous ne pouvez utiliser que la requête pour recevoir, Méthode request.getParameterValues() Ce qui est renvoyé est un String[], donc la méthode toString() de l'objet doit être appelée lors de la transmission au premier plan. Et si vous souhaitez toujours transmettre l'objet ? Salade!
Mais il peut être implémenté à l'aide de chaînes JSON, et les chaînes JSON sont analysées dans des objets JAVA en arrière-plan.

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

public class Person { 
private String username; 
private String password; 
private Address addr; 
}

L'objet Person a un attribut addr de type Address. Ce n'est pas important. Il s'agit d'un attribut qui est finalement utilisé par n'importe quel objet. Les valeurs sont tous des types de données de base et doivent uniquement être analysées à 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} 
);

La chaîne finale est le style suivant, (juste par exemple)

{"k":0,"v":0}

Réception en arrière-plan, aucun framework n'est discuté, seulement HttpServletRequest est nécessaire. Mais

String[] jsonArr = request.getParameterValues("aa[]");

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); 
}

OK À ce stade, la réception est terminée. Il ne reste plus qu'à convertir une chaîne JSON en POJO. J'utilise jsontools-core-1.7.jar. Ce package jar dépend de antlr-2.7.7.jar. Après le téléchargement, j'importe le chemin de classe et j'écris une classe d'outils simple. méthodes :

/** 
* 将对象转换为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()); 
}

Une fois que la requête a obtenu la valeur, elle parcourt le tableau et convertit la classe

Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);

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


Pour plus d'exemples jquery ajax de transmission de paramètres de tableau en arrière-plan et d'articles connexes, veuillez faire attention au site Web PHP chinois !


Déclaration:
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