加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ajax--表单映射

发布时间:2020-12-16 03:21:34 所属栏目:百科 来源:网络整理
导读: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

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属性值不匹配导致这种错误。
出现表单无法映射到后台实体还有可能是缺少架包的原因,可参考:http://blog.csdn.net/fpxty/article/details/72835993
http://www.cnblogs.com/yeyuchangfeng/p/5623445.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读