Ajax--表单映射
1 在表单序列化映射到后台实体对象中,走了蛮多弯路,特总结如下。 <form id="form01" enctype="multipart/form-data">
<input type="text" name="name" id="name"/>
<input type="text" name="password" id="password"/>
<input type="button" value="确认" onclick="upload()">
</form>
JS方法: function upload() {
$.ajax({
type:"POST",url : '<%=basePath%>upload01.do',//用于文件上传的服务器端请求地址
data : formToJson($("#form01")),contentType: 'application/json; charset=utf-8',success : function(data,status) //服务器成功响应处理函数 {
alert(data);
},error : function(data,status,e)//服务器响应失败处理函数 {
alert(e);
}
});
}
//将表单数据转化为JSON数据 form为表单对象,如$("#form01"),返回序列化数据
function formToJson(form) {
var data = form.serialize();
data = decodeURIComponent(data,true);//防止中文乱码
data = data.replace(/&/g,"','");
data = data.replace(/=/g,"':'");
data = "({'" + data + "'})";
obj = eval(data);
obj=JSON.stringify(obj);
return obj;
}
需要注意的是,为什么不直接用serialize()序列化表单呢?还要这麻烦。当时做的时候,$(“#form”).serialize()返回的是name=1&password=1的形式,不知道jquery怎么序列化成这样的,在网上找了半天,未果,看到一篇博客,http://www.cnblogs.com/suruozhong/p/6256457.html,将这种奇怪的序列化的结果通过换字符转成JSON的形式,然后OK,感谢博主。 @RequestMapping(value = "upload01",method = RequestMethod.POST)
public void uploadText01(
HttpServletRequest request,HttpServletResponse response,@RequestBody User user) {
System.out.println("run in");
}
需要说明的是在对象的前面加@RequestBody,前台的JSON数据才会映射到对象中,不然会报一系列的错: Unsupported Media Type
Content type 'application/json;charset=UTF-8' not supported
不过有可能是你的实体名称与标签中的name属性值不匹配导致这种错误。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 当ajax调用更改其值时,不会更新AngularJS中的javascript-ng
- 自定义ArcGIS API for Flex 地图提示窗体
- ruby-on-rails – 是否有相当于Grails的Rails命令/功能“ra
- .NET WinForm实现在listview中添加progressbar的方法
- cocos2d中的屏幕坐标系和OPenGL坐标系转换
- 8.6.1:聚合函数
- 正则表达式 – 如何在R中使用`grep`的反向引用?
- 学习TDD(4)--实例2:基于ZooKeeper的服务器注册和探测类[实
- com.alibaba.fastjson.JSON对类对象的序列化与反序列化
- 【cocos3.x+tilemap】制作rpg小游戏(一)地图制作