AI编程助手
AI免费问答

Ajax--表单映射

坏嘻嘻   2018-09-13 17:42   1718浏览 原创

本文实例讲述了python映射列表。分享给大家供大家参考。具体分析如下:

1 在表单序列化映射到后台实体对象中,走了蛮多弯路,特总结如下。 

表单:


                                

JS方法:

function upload() {
        $.ajax({
            type:"POST",
            url : '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 TypeContent type 'application/json;charset=UTF-8' not supported

不过有可能是你的实体名称与标签中的name属性值不匹配导致这种错误。
出现表单无法映射到后台实体还有可能是缺少架包的原因,

<!-- JSON支持 -->
        <dependency>
            <groupid>net.sf.json-lib</groupid>
            <artifactid>json-lib</artifactid>
            <!--指定jdk版本 -->
            <classifier>jdk15</classifier>
        </dependency>
        <dependency>
            <groupid>com.fasterxml.jackson.core</groupid>
            <artifactid>jackson-annotations</artifactid>
        </dependency>
        <dependency>
            <groupid>com.fasterxml.jackson.core</groupid>
            <artifactid>jackson-databind</artifactid>
        </dependency>
        <dependency>
            <groupid>com.fasterxml.jackson.core</groupid>
            <artifactid>jackson-core</artifactid>
        </dependency>

2 直接在方法中提交表单


               
function doConfirmForm(){
        var form01=$("#form01");
        form01.submit();
    }

3 Form表单转FormData然后JSON提交

    
            name:
                 
         password:
             
 <script></script><script> var formData = new FormData($("#form")[0]); formData.append("createDate",new Date()); $.ajax({ type: "POST", data: convertFormDataToJson(formData), url: "http://localhost:80/test/requestBody", contentType: &#39;application/json; charset=utf-8&#39;, dataType: "json", success: function(result) { console.log(result); } }); function convertFormDataToJson(formData) { var objData = {}; for (var entry of formData.entries()){ objData[entry[0]] = entry[1]; } return JSON.stringify(objData); } </script>

相关推荐:

jsp中 表单submit提交映射Servlet的问题_html/css_WEB-ITnose

python映射列表实例分析

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。