Ajax简单实现文件异步上传的多种方法

1. 认识FormData对象

FormData是Html5新加进来的一个类,可以模拟表单数据

构造函数

FormData (optional HTMLFormElement form) (可选)

 解释

 

一个HTML表单元素,可以包含任何形式的表单控件,包括文件输入框.

方法

void append(DOMString name, DOMString value)

  • name 表单元素名称
  • value 表单元素要传递的值
1 <form name="myForm"  enctype="multipart/form-data">
2     <input type="text" name="userName">
3     <input type="file" name="img">
4     <input type="button" id="btn" value="submit">
5 </form>

2. 使用javascript简单实现

 1 function upload() {
 2     var userName = document.myForm.userName.value;
 3     var img = document.myForm.img.files[0];
 4     var fm = new FormData();
 5     fm.append('userName', userName);
 6     fm.append('img', img);
 7 
 8     var request = new XMLHttpRequest();
 9     request.open('POST', 'submitform.php');
10     request.send(fm);
11 }

3. 使用Ajax实现

 1 $('#btn').click(function () {
 2     var userName = document.myForm.userName.value;
 3     var img = document.myForm.img.files[0];
 4 
 5     var fm = new FormData();
 6     fm.append('userName', userName);
 7     fm.append('img', img);
 8     $.ajax(
 9         {
10             url: 'submitform.php',
11             type: 'POST',
12             data: fm,
13             contentType: false, //禁止设置请求类型
14             processData: false, //禁止jquery对DAta数据的处理,默认会处理
15             //禁止的原因是,FormData已经帮我们做了处理
16             success: function (result) {
17                 //测试是否成功
18                 //但需要你后端有返回值
19                 alert(result);
20             }
21         }
22     );
23 });

4. ajaxfileupload.js插件实现Ajax文件上传

 1 function upload(){
 2 $.ajaxFileUpload({
 3         url: 'a.php', //用于文件上传的服务器端请求地址
 4         secureuri: false, //一般设置为false
 5         fileElementId: 'file', //文件上传空间的id属性  
 6         dataType: 'HTML', //返回值类型 一般设置为json
 7         success: function (data, status)  //服务器成功响应处理函数
 8         {                
 9             $("#img1").attr("src", data);
10             addI(data);
11         },
12         error: function (data, status, e)//服务器响应失败处理函数
13         {
14             alert(e);
15         }
16     }   
17 );
18 }

对于PHP就可以使用Files全局数组拿到文件属性,POST全局数组拿到userName的值

来自:http://www.jianshu.com/p/d90d2e6bb0d5

posted @ 2016-06-24 16:19  待繁华落尽  阅读(477)  评论(0编辑  收藏  举报