zoukankan      html  css  js  c++  java
  • FormData的使用

     var formData = new FormData();
    <form id="coords" class="coords" onsubmit="return false;" action="">
         <!-- 主要的控件 -->
          <input id="file" type="file" >

    <div class="inline-labels"> <label>X1 <input type="text" size="4" id="x1" name="x1" /></label> <label>Y1 <input type="text" size="4" id="y1" name="y1" /> </label> <label>X2 <input type="text" size="4" id="x2" name="x2" /></label> <label>Y2 <input type="text" size="4" id="y2" name="y2" /></label> <label>W <input type="text" size="4" id="w" name="w" /> </label> <label>H <input type="text" size="4" id="h" name="h" /></label> </div> </form>
    <button id="btn">上传头像</button>

    主要是通过formData封装我们要传递的参数,然后使用ajax传递到后端。

    这里有两中方式

    1.直接找到表单放到FormData中

     $("#btn").click(function(){
      var form = document.getElementById("coords");//获取到form表单$("coords")[0] 这样也可以    var formData = new FormData(form);//创建一个formData对象,将表单中的数据放进去,有一个问题,就是普通参数可以放进去,在后端也可以拿到,文件也可以拿到,昨天测试了
        
            $.ajax({//ajax
                        url: "/upload/uploadHeaderPic",//文件上传路径
                        type: "POST",
                        processData : false,//不处理数据,必须为false
                        contentType : false,//不设置内容类型,必须为false
                        data: formData,//这个就是我们封装的参数的一个formData
                        dataType:"json",
                        success: function(data){
                                //layer.msg(data.msg)
                                alert(data.msg);
                               console.log("msg",data.msg)
                        },
                        error:function(e){
                                console.log("msg","ajax调用出现错误")
                        }
            });
     }

    2.初始化后,一个一个添加到FormData中

     $("#btn").click(function(){
            //这里是只创建对象,不把整个表单放进去,而是一个一个的放进去
                var formData = new FormData();//创建一个formData对象

            var x1 = $('#x1').val(),
            x2 = $('#x2').val(),
            y1 = $('#y1').val(),
            y2 = $('#y2').val();
            formData.append('x11',x1 );
            formData.append('y11',y1 );
            formData.append('x22',x2 );
            formData.append('y22',y2 );

         $.ajax({//ajax
                        url: "/upload/uploadHeaderPic",
                        type: "POST",
                        processData : false,//不处理数据,必须为false
                        contentType : false,//不设置内容类型,必须为false
                        data: formData,
                        dataType:"json",
                        success: function(data){
                                //layer.msg(data.msg)
                                alert(data.msg);
                               console.log("msg",data.msg)
                        },
                        error:function(e){
                                console.log("msg","ajax调用出现错误")
                        }
                        
                    });
    })

    上边都是普通文本参数的传递。下边说下图片的传递。

    formData.append('img0', $('#file')[0].files[0]);

    图片的传递也是拿到图片的值,然后设置参数传递。
    但是需要注意的一点就是如何拿到图片的值。

    $('#file')[0].files[0] //这个取值就可以拿到
     <input id="file" type="file" > 的值[只可以拿到第一个图片]。
    $('#file')[0].files  //拿到多文件。
    这里设置值的时候如果写成这样
    formData.append('img0', $('#file')[0].files);我是用的是jfinal测试的,所以,这里是拿不到值的。具体原因未知。

    如果多个值可以循环遍历

    for(var i=0; i<$('#file')[0].files.length;i++){//使用for循环将选择的文件一个一个添加(append)到formData对象中
      formData.append('img0', $('#file')[0].files[i]);//注意:如果你使用的是jfinal框架这里的key(img)必须是不同的,如果相同的话文件能上传但是拿上传文件名的时候只能拿到一个
    }

    这种循环遍历的方式也是可以拿到值的。

    后台取值的时候jfinal的方式 getFiles("head"); “head”这个可以不写,这个是一个设置上传路径。getFiles()就可以拿到全部的值。

    普通取值的话,直接getPara("xx");就可以

    图片的传递方式和上边的普通传递参数方式一样都是使用一样的ajax方式

    ✨文件添加事件获取文件✨ 

    $("#fileId").on('change', function (e) {  //文件控件的改变监听事件
      var fileList = e.currentTarget.files; //获取所有的文件
      $.each(fileList, function (index, item) {
          var name = item.name;//名称
    var sizeKb = (item.size /1024).toFixed(2)//文件大小默认b,除以1024就是kb, toFixed(2)保留两位小数
      })
    })
  • 相关阅读:
    随机验证码生成
    python之map和filter
    Json学习笔记
    动态规划求区间最值问题RMQ(Range Minimum/Maximum Query)
    积水问题
    5亿个数找中位数
    Linux下进程间通信:命名管道mkfifo
    Trie树总结
    树的公共祖先问题LCA
    类文件结构
  • 原文地址:https://www.cnblogs.com/renjianjun/p/9426150.html
Copyright © 2011-2022 走看看