使用PHP和HTML5 FormData實(shí)現(xiàn)無刷新文件上傳教程
無刷新文件上傳是一個(gè)常見而又有點(diǎn)復(fù)雜的問題,常見的解決方案是構(gòu)造 iframe 方式實(shí)現(xiàn)。
在 HTML5 中提供了一個(gè) FormData 對象 API,通過 FormData 可以方便地構(gòu)造一個(gè)表單請求,并通過 XMLHttpRequest 來發(fā)送。通過 FormData 對象發(fā)送文件也是可以的,如此則無刷新上傳就變的非常簡單了。
那么 FormData 怎么使用呢?下面腳本之家對此進(jìn)行簡單的介紹。
1. 構(gòu)造 FormData 對象
想得到一個(gè)FormData對象,很簡單:
var fd = new FormData();
FormData 對象只提供了一個(gè)方法 append ,用于向?qū)ο笾刑砑颖韱握埱髤?shù)。
在當(dāng)前主流瀏覽器中,可通過如下兩種方式獲取或修改FormData。
方法一:創(chuàng)建一個(gè)空的FormData對象,然后再用append方法逐個(gè)添加鍵值對。示例:
var fd = new FormData(); fd.append("name", "腳本之家"); fd.append("blog", "http://jb51.net"); fd.append("file", document.getElementById("file"));
這種方法可以不需要 HTML 的表單對象存在。
方法二:取得form元素對象,將它作為參數(shù)傳入FormData對象中。示例:
var formobj = document.getElementById("form"); var fd = new FormData(formobj);
當(dāng)然,這里還可以使用 append 方法繼續(xù)向 fd 中添加其他參數(shù)。
2. FormData 發(fā)送請求
得到 FormData 對象了,如何發(fā)送請求呢? FormData 對象主要用于增強(qiáng)型的 XMLHttpRequest 對象的 send 方法中。參考如下示例:
var xhr = new XMLHttpRequest(); xhr.open("POST" ,"http://jb51.net" , true); xhr.send(fd); xhr.onload = function(e) { if (this.status == 200) { alert(this.responseText); } };
3. jquery 中使用 FormData
在 jQuery 的 ajax 方法中,也可使用 FormData 方式實(shí)現(xiàn)無刷新上傳。但要注意參數(shù)的設(shè)置,參考如下:
$.ajax({ url: "http://jb51.net", type: 'POST', data: fd, /** *必須false才會自動加上正確的Content-Type */ contentType:false, /** * 必須false才會避開jQuery對 formdata 的默認(rèn)處理 * XMLHttpRequest會對 formdata 進(jìn)行正確的處理 */ processData:false }).done(function(result){ console.log(result); }).fail(function(err){ console.log(err); });
4. 一個(gè)完整的示例(包含PHP處理示例):
<?php //php 接收表單提交信息并打印 if( isset( $_REQUEST['do']) ){ var_dump($_REQUEST); var_dump($_FILES); die(); } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>FormData Test - jb51.net</title> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> </head> <body> <form id="form"> <input type="file" name="file" id="file" /> <input type="text" name="name" id="" value="腳本之家" /> <input type="text" name="blog" id="" value="http://jb51.net" /> <input type="submit" name="do" id="do" value="submit" /> </form> <script> $("form").submit(function(e){ e.preventDefault(); //空對象然后添加 var fd = new FormData(); fd.append("name", "腳本之家"); fd.append("blog", "http://jb51.net"); fd.append("file", document.getElementById("file")); //fd.append("file", $(":file")[0].files[0]); //jQuery 方式 fd.append("do", "submit"); //通過表單對象創(chuàng)建 FormData var fd = new FormData(document.getElementById("form")); //var fd = new FormData($("form:eq(0)")[0]); //jquery 方式 //XMLHttpRequest 原生方式發(fā)送請求 var xhr = new XMLHttpRequest(); xhr.open("POST" ,"" , true); xhr.send(fd); xhr.onload = function(e) { if (this.status == 200) { alert(this.responseText); }; }; return; //jQuery 方式發(fā)送請求 $.ajax({ type:"post", //url:"", data: fd, processData: false, contentType: false }).done(function(res){ console.log(res); }); return false; }); </script> </body> </html>
- php 下 html5 XHR2 + FormData + File API 上傳文件操作實(shí)例分析
- PHP使用HTML5 FileApi實(shí)現(xiàn)Ajax上傳文件功能示例
- php+html5實(shí)現(xiàn)無刷新圖片上傳教程
- php+html5+ajax實(shí)現(xiàn)上傳圖片的方法
- php+html5使用FormData對象提交表單及上傳圖片的方法
- php 使用html5實(shí)現(xiàn)多文件上傳實(shí)例
- PHP 文件上傳進(jìn)度條的兩種實(shí)現(xiàn)方法的代碼
- php實(shí)現(xiàn)簡單的上傳進(jìn)度條
- php上傳文件并顯示上傳進(jìn)度的方法
- PHP+Ajax無刷新帶進(jìn)度條圖片上傳示例
- PHP+Ajax實(shí)現(xiàn)上傳文件進(jìn)度條動態(tài)顯示進(jìn)度功能
- php 使用html5 XHR2實(shí)現(xiàn)上傳文件與進(jìn)度顯示功能示例
相關(guān)文章
Laravel validate error處理,ajax,json示例
今天小編就為大家分享一篇Laravel validate error處理,ajax,json示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10php小型企業(yè)庫存管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)代碼
雙專業(yè)畢業(yè)論文做了一個(gè)小型企業(yè)庫存管理系統(tǒng),使用PHP&mysql組合進(jìn)行開發(fā)。頭一次開發(fā)稍微大一點(diǎn)的東西,php也是自學(xué)的2011-05-05AMFPHP php遠(yuǎn)程調(diào)用(RPC, Remote Procedure Call)工具 快速入門教程
AMFPHP是PHP的遠(yuǎn)程調(diào)用(RPC, Remote Procedure Call)工具。2010-05-05利用Laravel生成Gravatar頭像地址的優(yōu)雅方法
Gravatar是一圖像跟隨著您到訪過的網(wǎng)站,當(dāng)您在博客中留言或發(fā)表文章,它將會出現(xiàn)在您的名稱旁。下面這篇文章主要給大家介紹了關(guān)于利用Laravel如何生成 Gravatar 頭像地址的優(yōu)雅方法,需要的朋友可以參考下。2017-12-12