jquery ajax 向后台传递数组参数示例

时间:2016.04.19 发布人:absusan

jquery ajax 向后台传递数组参数示例

已解决问题

谷歌absusan用户在2016.04.19提交了关于“妖猫传jquery ajax 向后台传递数组参数示例”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-25T14:00:46。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,你是我的宝贝,你是我的花,谢谢你对我的帮助!

希望以下的回答,能够帮助你。

第1个回答

用户名:lanpade2  

需求:
在JS中向后台传递数组参数

分析:
JS中的数组是弱类型的可以放任何类型(对象、基本类型),但是如果数组中放的是对纪初食兵象类型,传递到后台是显示的只能是对象字符串--[objectObjec害t],原因如下:
后台接收的时候,只能用request来接收,request.getParameterValues()方法返回的是一个String[],所以,味款出输唱班应该是在前台传输的时候调用了对象的toString()方法,那么如果依然想传递对象怎么办?凉拌!
但是可以使用JSON字符串来实现,在后台把JSON字符串解析成J**A对象。

也许,你要说如果是复合对象案矛城坐扩谓督担怎么办,比如如下:
复制代码代码如下:
publicclassPerson{
privateStringusername;
privateStringpassword;
privateAddressaddr;
}

Person对象里有个Address类型的addr属性,没关系,任何对象最终用到的属性旨是基本数州探年留省溶按顺据类型,只需要使用对应的包校扬太逐装类型parseInt、或者parseXX重换X解析即可。

实现:
OK,原理就是这么个。先看JS如何写:
复制代码代码如下:
varas=[];
var杨谓声并temp=[];
for(varint=0;int<5;i伟弦职统尔每罪普nt++){
temp.pus修令终为广危更即h('{"k":');
temp.push(int);
temp.push(',"v":');
temp.push(int);
temp更.push('}');
as.push(temp.jo担晶体益将器脚in(""));
}
//Jquery中的方法,具体参考JqueryAPI
$.post(
"servlet/AjaxServlet?m=put划门衣WarningRule",{"aa":as}
);


最终拼成的串就是如下样式,(只步练虽眼起岩正尔永作举例)
复制代码代码如下:
{"k":0,"v":0}

后台接收,不讨论任何框架,只需要h**ttpServletRequest即可
复制代码代码如下:
String[]jsonArr=request.getParameterValues("aa[]");

有一点需要注意,在js中传参的时候参数名叫"aa",而在后台接收的时候却是"aa[]",这里应该是Jquery做了转换,所以最好的方式就是在JS中就改为"aa[]",之所以这里践金她被皮无上英没有写"[]"是为了说明问题。可以使用如下方式打印request中的所有参数
复制代码代码如下:
E**meration<String>names=request.getParameterNames();
while(names.hasMoreElements()){
Stringstring=(String)names.nextElement();
System.out.println(string);
}

OK,至此为止,已经接收完毕,剩下的就是如何将一个JSON字符串转成一个POJO了。我使用jsontools-core-1.7.jar,此jar包依赖antlr-2.7.7.jar,自行到代码库中下载,下载完毕,导入classpath,写一个简单的工具类,主要有这么2个方法:
复制代码代码如下:
/**
*将对象转换为JSON格式的字符串
*@paramobj
*@return返回JSON字符串
*/
publicstaticStringtoJSONAsString(Objectobj){
try{
returnJSONMapper.toJSON(obj).render(false);
}catch(MapperExceptione){
e.printStackTrace();
}
return**ll;
}

@SuppressWarnings("unchecked")
publicstatic<T>TjsonToObject(StringjsonStr,Class<T>targetClass)throwsTokenStreamException,RecognitionException,MapperException{
JSONValuejv=newJSONParser(newStringReader(jsonStr)).nextValue();
return(T)JSONMapper.toJ**a(jv,targetClass);
}

//test
publicstaticvoidmain(String[]args)throwsException{
Personp=newPerson();
p.setK("a");
p.setV("v");

Stringjson=toJSONAsString(p);
Personnp=jsonToObject(json,Person.class);
System.out.println(np.getK()+"=="+np.getV());
}

request取到值后,遍历数组,挨个转换
复制代码代码如下:
Personp=JSO**tils.jsonToObject(jsonArr[0],Person.class);

Person类如下:
复制代码代码如下:
publicclassPerson{
privateStringk;
privateStringv;
publicStringgetK(){
returnk;
}
publicvoidsetK(Stringk){
this.k=k;
}
publicStringgetV(){
returnv;
}
publicvoidsetV(Stringv){
this.v=v;
}
}