博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Ajax方式上传文件,使用FormData进行Ajax请求
阅读量:5922 次
发布时间:2019-06-19

本文共 2295 字,大约阅读时间需要 7 分钟。

通过
传统的form表单提交的方式上传文件:

测试通过Rest接口上传文件

指定文件名:

上传文件:

关键字1:

关键字2:

关键字3:

 

不过传统的form表单提交会导致页面刷新,
但是在有些情况下,我们不希望页面被刷新,这种时候我们都是使用Ajax的方式进行请求的:
$.ajax({     url : "http://localhost:8080/STS/rest/user",     type : "POST",     data : $( '#postForm').serialize(),     success : function(data) {          $( '#serverResponse').html(data);     },     error : function(data) {          $( '#serverResponse').html(data.status + " : " + data.statusText + " : " + data.responseText);     }});

 

如上,通过$('#postForm').serialize()可以对form表单进行序列化,从而将form表单中的所有参数传递到服务端。
 
但是上述方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。
不过如今主流浏览器都开始支持一个叫做FormData的对象,有了这个FormData,我们就可以轻松地使用Ajax方式进行文件上传了。

 

 

关于FormData及其用法


FormData是什么呢?我们来看看Mozilla上的介绍。
XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件. 所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。参见:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/FormData

 

这里只展示一个通过from表单来初始化FormData的方式
<form enctype="multipart/form-data" method="post" name="fileinfo">
var oData = new FormData(document.forms.namedItem("fileinfo" ));oData.append( "CustomField", "This is some extra data" );var oReq = new XMLHttpRequest();oReq.open( "POST", "stash.php" , true );oReq.onload = function(oEvent) {      if (oReq.status == 200) {          oOutput.innerHTML = "Uploaded!" ;     } else {          oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.
"; }};oReq.send(oData);

 

参见:
 
 
使用FormData,进行Ajax请求并上传文件

这里使用JQuery,但是老版本的JQuery比如1.2是不支持的,最好使用2.0或更新版本:

指定文件名:

上传文件:

 

function doUpload() {     var formData = new FormData($( "#uploadForm" )[0]);     $.ajax({          url: 'http://localhost:8080/cfJAX_RS/rest/file/upload' ,          type: 'POST',          data: formData,          async: false,          cache: false,          contentType: false,          processData: false,          success: function (returndata) {              alert(returndata);          },          error: function (returndata) {              alert(returndata);          }     });}

 

转载地址:http://bxivx.baihongyu.com/

你可能感兴趣的文章
qualcomm platform camera porting
查看>>
OpenSSL开发学习总结
查看>>
分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月6日-2月12日)
查看>>
open-flash-chart + PHP + jQuery实例
查看>>
SharePoint 2010 Search 架构 - 已完工
查看>>
为什么包含多句代码的宏要用do while包括起来?
查看>>
win2003安装完sqlserver2005后没有SSMS
查看>>
EJB---->复合主键(Composite Primary Key)
查看>>
在oracle的连接(join)中使用using关键字
查看>>
【转】linux下杀死进程(kill)的N种方法
查看>>
“ sgen.exe ”已退出,代码为 1
查看>>
iso学习网站记录
查看>>
Doing well in your courses ---- a guide by Andrej Karpathy
查看>>
delete archivelog all 无法彻底删除归档日志?
查看>>
浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因...
查看>>
Apache Solr facet 分组查询
查看>>
15个最佳和最新的jQuery图像效果教程
查看>>
android游戏开发框架libgdx的使用(六)--演员和演出
查看>>
WPF 4.5中对绑定的改善
查看>>
android 获取 图片 缩略图
查看>>