需求:
在JS中向后台传递数组参数
分析:
JS中的数组是弱类型的可以放任何类型(对象、基本类型),但是如果数组中放的是对象类型,传递到后台是显示的只能是对象字符串--[object Object],原因如下:
在后台接收的时候,只能用request来接收,request.getParameterValues()方法返回的是一个String[],所以,应该是在前台传输的时候调用了对象的toString()方法,那么如果依然想传递对象怎么办?凉拌!
但是可以使用JSON字符串来实现,在后台把JSON字符串解析成JAVA对象。
也许,你要说如果是复合对象怎么办,比如如下:
public class Person {
private String username;
private String password;
private Address addr;
}
Person对象里有个Address类型的addr属性,没关系,任何对象最终用到的属性值都是基本数据类型,只需要使用对应的包装类型parseInt、或者parseXXX解析即可。
实现:
OK,原理就是这么个。先看JS如何写:
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}
);
最终拼成的串就是如下样式,(只作举例)
{"k":0,"v":0}
后台接收,不讨论任何框架,只需要HttpServletRequest即可
String[] jsonArr = request.getParameterValues("aa[]");
有一点需要注意,在js中传参的时候参数名叫"aa",而在后台接收的时候却是"aa[]",这里是Jquery做了转换,所以最好的方式就是在JS中就改为"aa[]",之所以这里没有写"[]"是为了说明问题。可以使用如下方式打印request中的所有参数
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String string = (String) names.nextElement();
System.out.println(string);
}
OK,至此为止,已经接收完毕,剩下的就是如何将一个JSON字符串转成一个POJO了。我使用
jsontools-core-1.7.jar,此jar包依赖
antlr-2.7.7.jar,自行到代码库中下载,下载完毕,导入classpath,写一个简单的工具类,主要有这么2个方法:
/**
* 将对象转换为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());
}
request取到值后,遍历数组,挨个转换
Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);
Person类如下:
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;
}
}
分享到:
相关推荐
本文将深入讲解如何在jQuery AJAX中向后台传递数组参数,并提供示例代码。 首先,理解问题的关键在于JavaScript数组在传递给后台时,如果数组内包含的是对象,会被转化为`[object Object]`的字符串形式。这是因为...
当使用jQuery的/ajax()方法向后端传递数组时,可能会遇到后台无法正确接收数组的问题。通常情况下,JavaScript在对象中作为值传递数组时,并不会改变其作为数组的特性。但在某些后端技术中,比如Spring MVC,会因为...
总结来说,通过这种方式,我们可以利用AJAX向Struts2 Action传递JSON数组,实现异步数据交互。这在动态更新页面内容、处理表单提交等场景下非常有用。同时,使用JSON作为数据交换格式,使得前后端的数据交换变得更加...
在这个场景中,我们特别关注的是如何使用jQuery传递数组对象到后台。下面我们将详细探讨这个主题。 1. **JSON对象与数组** 在JavaScript中,数组是存储一系列值的数据结构,而对象则是一组键值对。为了将数组或...
### AJAX传递List对象数组知识点详解 #### 一、前言 在Web开发中,前后端交互是必不可少的一个环节。AJAX作为一种实现异步加载数据的技术,可以有效地提升用户体验。本篇将详细介绍如何通过AJAX来传递一个List对象...
下面详细探讨jquery向后台提交数组时涉及到的各个知识点。 ### jQuery向后台提交数组 #### 1. 使用$.post()方法提交数组 jQuery提供了多种方式来发送HTTP请求,其中包括$.post()方法。在需要向后台提交数组时,...
jQuery中的AJAX请求是一种非常常见的前端异步数据交互方式,它的作用是使得页面无需重新加载即可向服务器请求数据,并将数据动态地加载到页面中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它...
Asp.net 中 jQuery、ajax 调用后台方法总结 在 Asp.net 中,使用 jQuery 和 Ajax 调用后台方法是一种常见的做法。下面总结了几种常见的调用方法。 有参数的方法调用 在前台使用 jQuery 代码调用后台方法时,需要...
通过正确配置Ajax请求和服务器接口,你可以轻松地传递和处理List、Map等复杂数据结构,提升Web应用的交互体验。在实际项目中,确保对错误处理和安全性有充分考虑,这将有助于构建健壮和安全的Web应用。
本示例中,前端使用JSON格式向后台传递对象数组,这是一个常见的Ajax异步请求。以下将详细讲解实现这个功能的关键步骤和涉及的技术点。 首先,前端部分: 1. 创建一个JavaScript数组`vipFee`来存储待传递的对象: ...
返回的是JSON格式的数据,可以被jQuery的Ajax请求接收并传递给回调函数。 总结一下,这个实例展示了以下关键知识点: 1. **jQuery的Ajax功能**:`$.get`方法用于发起GET请求,`callback`函数处理响应数据。 2. **...
**jQuery AJAX 分页技术在前端应用详解** 在Web开发中,分页是一种常见的用户界面功能,用于处理大量数据的展示,提高页面加载速度并优化用户体验。本篇文章将深入探讨如何利用jQuery和AJAX技术实现纯前端的分页...
总结来说,通过jQuery的AJAX功能,前后台间可以方便地传递JSON数据。在实际应用中,这允许开发人员实现动态数据交互,提高用户体验,同时减少了不必要的页面刷新。需要注意的是,确保JSON格式的正确性以及在前后端...
在这个实例中,我们将探讨如何使用jQuery库结合PHP来通过AJAX传递JSON数据。jQuery简化了JavaScript的DOM操作和AJAX调用,使得开发更为便捷。 首先,我们来看HTML部分。HTML页面包含一个表单,用户可以输入姓名、...
通过以上步骤,我们可以实现使用jQuery AJAX从页面前端调用后台方法,获取数据并更新页面内容,从而实现页面的动态更新,提高用户体验。在实际开发中,可以根据需求调整这些方法,例如添加请求前后的加载动画,或者...
由于其语法与JavaScript对象的语法几乎相同,因此在AJAX中,JSON成为传递数据的理想选择。JSON格式有以下特点: 1. **键值对**:数据以键值对的形式存储,键用引号括起,冒号分隔键和值,逗号分隔各个键值对。 2. *...
在使用jQuery发起AJAX请求时,我们经常会遇到需要向服务器端传递多个参数的情况。标准的$.post方法并不直接支持数组类型的参数,但是我们可以通过特定的方式来实现这一需求。下面,我会详细介绍如何使用jQuery的$....