JQuery基于FormData异步提交数据文件


Posted in jQuery onSeptember 01, 2020

web中数据提交事件是常常发生的,但是大多数情况下我们不希望使用html中的form表单提交,因为form表单提交会中断当前浏览器的操作并且会调到另一个地址(即使这个地址是当前页面),并且会重复加载一些html浪费带宽,我们希望达到一个无刷新的、异步的提交效果来给用户更好的体验,这时候就要使用ajax,ajax可以不依赖表单自行发起一次http请求并且取回服务器响应的数据,这就是ajax的简便之处。我们这里使用JQuery中封装好的ajax函数,更加简便。下面列举几个使用ajax异步提交数据的方法。

一:jquery.js中的$.ajax方法

此方法依赖jquery.js插件,有很多版本,可以自己下载。

我们需要在此$.ajax方法中指定一些参数,比如请求地址、请求类型、所需要传输的数据、请求成功后需要执行的操作,这里简略说一下。

$.ajax({
    url:"你的url地址",
    type:'post',
    data:{key:'value'},
    success:function(){
      alert('成功');
    }
  })

这是$.ajax方法的简单用法。其中参数data是你要传输的数据,这里的data支持Json对象和字符串。data数据如果是一个form表单里面的,自己写一个json很慢,可以使用jquery里面的serizlize()方法。这个方法返回一个字符串(每个form表单提交的时候也是转化为相同格式的字符串)。

$.ajax({
    url:"你的url地址",
    type:'post',
    data:$('form').serialize(), // "id=asdasd&s=000&name=1233"
    success:function(){
      alert('成功');
    }
  })

那么,文件也是这样提交的吗?

对于文件的提交我们需要对$.ajax进行一些特殊的设置,并且使用FormData的对象。

<input type="file" name="f" id="f" multiple>

var fd = new FormData();
    fd.append("name", "bill");
    fd.append("photo", $('#f')[0].files[0]);
    fd.append("photo2", $('#f')[0].files[1]);
    $.ajax({
      url: '/webform1.aspx',
      type: 'post',
      processData: false,
      contentType: false,
      data: fd,
      success: function () {
        alert("ok")
      }
    })

我们创建一个fd对象并向其中添加键值对,这个值可以是一个文件。$('#f')[0]是取出id=f的元素,至于为什么是[0],这是因为jquery对象都有一个默认为0的索引用来取出其Dom元素,$('f')是一个jquery对象,[0]为Dom元素 可以用dom的所有属性和方法。然后使用files来取出文件。这里我使用了files[0]和files[1],这是multiple可以上传多个文件我这里上传了两个。

然后服务器就可以接收文件了,和表单一样的接收方法。

当然可以把一个form直接转化为一个FormData对象,这样我们可以避免把所需内容一个个append到FormData里面。

var fd = new FormData(document.querySelector("form"));
fd.append("CustomField", "This is some extra data");
$.ajax({
 url: "stash.php",
 type: "POST",
 data: fd,
 processData: false, // 不处理数据
 contentType: false  // 不设置内容类型
});

使用append添加时formdata的key若已存在,则不能重复添加,会忽略本次append操作,这在对于使用经常需要表单取出值是相当不利的,所以建议使用set方法来添加新的key-value值,set的意思是修改一个已经存在的键值对,如果不存在的话就创建一个。即

fd.set("CustomField", "This is some extra data");
$.ajax是主动事件,而我们希望当用户点击按钮才执行,这里可以将$.ajax函数放在一个按钮的click事件里面,也可以使用下面的方法。

$('form').submit(function{
  // 你自己的代码,一般是数据合法性验证
$.ajax({ 
     
   });
   return false;
})

submit函数可以在表单被提交时执行,我们可以用来将其作为执行$.ajax函数的触发事件,然后使用return false来提前阻止这个表单的提交。

注意:有些文章里说FormData的兼容问题,FormData很早就提出来了。并且入股哟你想要使用jquery里面的ajax来传输文件就免不了使用它这是因为下面两个方法也用到了FormData。当然原生的ajax有直接传输文件的方法,感兴趣的人可以看下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
jQuery中extend函数简单用法示例
Oct 11 jQuery
jQuery中过滤器的基本用法示例
Oct 11 jQuery
基于jQuery中ajax的相关方法汇总(必看篇)
Nov 08 jQuery
JQuery选中select组件被选中的值方法
Mar 08 jQuery
jQuery中元素选择器(element)简单用法示例
May 14 jQuery
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
详解jQuery-each()方法
Mar 13 jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
JQuery使用数组遍历跳出each循环
Sep 01 #jQuery
JS JQuery获取data-*属性值方法解析
Sep 01 #jQuery
jQuery实现动态加载瀑布流
Sep 01 #jQuery
js和jquery判断数据类型的4种方法总结
Aug 28 #jQuery
jQuery编写QQ简易聊天框
Aug 27 #jQuery
jQuery实现简单QQ聊天框
Aug 27 #jQuery
基于jquery实现彩色投票进度条代码解析
Aug 26 #jQuery
You might like
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python中元组,列表,字典的区别
2017/05/21 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python去除扩展名的实例讲解
2018/04/23 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
Python如何输出百分比
2020/07/31 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Python解析微信dat文件的方法
2020/11/30 Python
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
国防教育标语
2014/10/08 职场文书
青岛导游词
2015/02/12 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Redis 哨兵集群的实现
2021/06/18 Redis
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server