欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用formData,在使用form表单提交参数(或者文件)时,处理回调函数

程序员文章站 2022-05-29 23:12:29
...

我们通常在使用传统的form表单进行传参或者上传文件时,只要提交了参数,会有以下两个问题:
1、无法处理回调函数
2、页面会刷新

  • 1、拿一个很简单的图片做例子,如图
    利用formData,在使用form表单提交参数(或者文件)时,处理回调函数

这里其实也有两种情况:
1)这里有参数,也有文件上传,很明显,这里的文件上传和参数提交,需要分开请求,但是文件上传这里也是一个表单,如果使用传统的表单提交,点了开始上传后,这个页面就会刷新,虽然文件上传过去了,但给人的体验很不好。
2)当这里是一个弹出层,例如layer.open打开的,如果点击开始上传后,页面刷新,这个弹窗就会关闭,那其他参数就无法正常提交了。

  • 2、解决如上问题的办法:
    使用jquery的一个formData的对象,使用如下:
<div id="setting-layer" style="position:relative;height:100%;overflow:hidden;">
    <div class="sug-box">
        <p>选择部门:<input id="orgTree"/><p/>
        <p>处理原因:</p><textarea id="sug"></textarea>
    </div>'
    <form id="addBillForm" method="post" enctype="multipart/form-data">
        <div class="file-box">'
            <span>文件上传</span><b class="file-path"></b>
            <input type="file" id="order-upload" name="file" onchange="getFilePath(this)">
            <label id="label-choose" for="order-upload">选择文件</label><button class="btn-upolad" id="fileUpload" type="button">开始上传</button>
        </div>
    </form>
    <button class="layui-btn" id="btn-sure">确定</button>
</div>

这里的代码就是上面的那张图的,可以看出,这里有一个form,用于文件上传,这里使用的是springmvc的MultipartFile,我另一篇文章有写这个的使用方法。
下面我们写js实现异步文件上传:

 $('#fileUpload').click(function(){
    //初始化FormData函数,传入的是一个form
    var formData = new FormData($("#addBillForm")[0]);
    //formData.append('sgid',_sgId); 添加表单之外的参数
    $.ajax({
          url: '${path}/bill/uploadFile',
          type: 'POST',  
          data: formData,  
          cache: false,  
          contentType: false,  
          processData: false,  
          success: function (data) {
              layer.msg('上传成功',{icon: 1});

          },  
          error: function (data) { 
              layer.msg("上传失败",{icon: 5});
          }  
     })
})

如上,当我们选择文件后,点击上传,页面也不会刷新,而且文件也上传成功了,这样我们可以继续处理我们这个页面的其他业务了。

ps: 当我们需要提交form之外的参数,可以使用

formData.append('sgid',_sgId);
相关标签: 表单