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