Ajax简单实现文件异步上传的多种方法
mohj7862
8年前
<p>1. 认识FormData对象</p> <blockquote> <p>FormData是Html5新加进来的一个类,可以模拟表单数据</p> </blockquote> <table> <thead> <tr> <th>构造函数</th> <th>解释</th> </tr> </thead> <tbody> <tr> <td>FormData (optional HTMLFormElement form)</td> <td>(可选) 一个HTML表单元素,可以包含任何形式的表单控件,包括文件输入框.</td> </tr> </tbody> </table> <h2>方法</h2> <p>void append(DOMString name, DOMString value)</p> <ul> <li>name 表单元素名称</li> <li>value 表单元素要传递的值</li> </ul> <pre> <code class="language-javascript"><form name="myForm" enctype="multipart/form-data"> <input type="text" name="userName"> <input type="file" name="img"> <input type="button" id="btn" value="submit"> </form></code></pre> <p>2. 使用javascript简单实现</p> <pre> <code class="language-javascript">function upload() { var userName = document.myForm.userName.value; var img = document.myForm.img.files[0]; var fm = new FormData(); fm.append('userName', userName); fm.append('img', img); var request = new XMLHttpRequest(); request.open('POST', 'submitform.php'); request.send(fm); }</code></pre> <p>3. 使用Ajax实现</p> <pre> <code class="language-javascript">$('#btn').click(function () { var userName = document.myForm.userName.value; var img = document.myForm.img.files[0]; var fm = new FormData(); fm.append('userName', userName); fm.append('img', img); $.ajax( { url: 'submitform.php', type: 'POST', data: fm, contentType: false, //禁止设置请求类型 processData: false, //禁止jquery对DAta数据的处理,默认会处理 //禁止的原因是,FormData已经帮我们做了处理 success: function (result) { //测试是否成功 //但需要你后端有返回值 alert(result); } } ); });</code></pre> <p>4. ajaxfileupload.js插件实现Ajax文件上传</p> <pre> <code class="language-javascript">function upload(){ $.ajaxFileUpload({ url: 'a.php', //用于文件上传的服务器端请求地址 secureuri: false, //一般设置为false fileElementId: 'file', //文件上传空间的id属性 dataType: 'HTML', //返回值类型 一般设置为json success: function (data, status) //服务器成功响应处理函数 { $("#img1").attr("src", data); addI(data); }, error: function (data, status, e)//服务器响应失败处理函数 { alert(e); } } ); }</code></pre> <ul> <li>对于PHP就可以使用Files全局数组拿到文件属性,POST全局数组拿到userName的值</li> </ul> <p><br> 来自:http://www.jianshu.com/p/d90d2e6bb0d5<br> </p>