使用jquery Ajax實現(xiàn)上傳附件功能
用過jquery的Ajax的人肯定都知道,Ajax的默認(rèn)編碼方式是”application/x-www-form-urlencoded“,此編碼方式只能編碼文本類型的數(shù)據(jù),因此Ajax發(fā)送請求的時候,會把data序列化成 一個個String類型的鍵值對,此種傳輸數(shù)據(jù)的方式能夠滿足大部分應(yīng)用場景,然而當(dāng)傳輸?shù)臄?shù)據(jù)里有附件的時候,此序列化機制便是我們的絆腳石。Ajax本身的序列化機制的硬傷歸其原因在于在html4的時代,沒有FileReader接口,在頁面里無法讀取File(Blob)文件,用document.getElementById("文件控件的id").value只能拿到文件的name,因此去序列化去編碼它也無從談起(個人觀點,有不同意見的歡迎給我留言)。
眾所周知,用form提交表單的時候,有附件的時候,只要設(shè)置form的enctype="multipart/form-data",便可以上傳附件。于是博主想到,若是能用Ajax提交一個form,那上傳附件豈不是變的簡單,再也不需要使用類似AjaxFileUpload之類的插件來作上傳。html5讓這一切便的簡單。
FormData是html5的接口,使用它一行代碼便可以拿到整個form表單對象:
var form = new FormData(document.getElementById("form"));
然后我們拿著這個form對象,去賦給Ajax的data,并且阻止它將參數(shù)轉(zhuǎn)成成String類型的鍵值對,此舉需要設(shè)置processData屬性為false,此屬性默認(rèn)為true;同時設(shè)置Ajax的編碼方式為false(contentType: false),在form表單里已經(jīng)設(shè)置了編碼方式,Ajax的編碼機制已經(jīng)不需要,這樣我們就可以用Ajax去提交一個form對象,從而解決表單有附件的問題。需要注意的是,務(wù)必將Ajax的提交方式,設(shè)置為post,get請求只能攜帶幾kb的數(shù)據(jù)。若是不設(shè)置processData為false,去提交帶附件的form同樣是提交不上去的,它的序列化機制是硬傷。所以提交的時候,只能不使用它的序列化機制。
一言以蔽之:借Ajax的殼,去提交form。
示例如下:
<!DOCTYPE html> <html> <head> <script src="js/jquery-1.9.1.min.js"></script> <meta charset="utf-8" /> <title>Ajax提交form</title> <script type="text/javascript"> function test(){ var form = new FormData(document.getElementById("form")); $.ajax({ url:"接口地址", type:"post", data:form, cache: false, processData: false, contentType: false, success:function(data){ alert("操作成功!"); }, error:function(e){ alert("網(wǎng)絡(luò)錯誤,請重試??!"); } }); } </script> </head> <body> <form id="form" enctype="multipart/form-data"> <input type="text" id="name" name="name" /> <input type="text" id="phone" name="phone" /> <input type="text" id="content" name="content" /> <input type="text" id="price" name="price" /> <input type="text" id="ifPhone" name="ifPhone" /> <input type="text" id="ifCerName" name="ifCerName" /> <input type="text" id="endTime" name="endTime" /> <input type="text" id="type" name="type" /> <input type="file" id="fileAttach" name="fileAttach" /> <input type="button" onclick="test()" value="上傳" /> </form> </body> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Jquery的Ajax技術(shù)使用方法
- JQuery實現(xiàn)ajax請求的示例和注意事項
- JQuery Ajax執(zhí)行跨域請求數(shù)據(jù)的解決方案
- PHP ajax+jQuery 實現(xiàn)批量刪除功能實例代碼小結(jié)
- jQuery Ajax實現(xiàn)Select多級關(guān)聯(lián)動態(tài)綁定數(shù)據(jù)的實例代碼
- 為jquery的ajax請求添加超時timeout時間的操作方法
- jQuery的Ajax接收java返回數(shù)據(jù)方法
- jQuery AJAX 方法success()后臺傳來的4種數(shù)據(jù)詳解
- jquery 通過ajax請求獲取后臺數(shù)據(jù)顯示在表格上的方法
- AJAX在JQuery中的應(yīng)用詳解
相關(guān)文章
基于jquery實現(xiàn)漂亮的動態(tài)信息提示效果
這個效果是在頁面頭部出現(xiàn)的,出現(xiàn)一下會自動隱藏,上面有x那個提示就要手動關(guān)閉一下,其他的都是自動隱藏的!2011-08-08牛叉的Jquery——Jquery與DOM對象的互相轉(zhuǎn)換及DOM的三種操作
Jquery對象就是通過jQuery包裝DOM對象后產(chǎn)生的對象,jQuery對象是jQuery獨有的,其可以使用jQuery里的方法,本文給大家介紹Jquery對象就是通過jQuery包裝DOM對象后產(chǎn)生的對象,jQuery對象是jQuery獨有的,其可以使用jQuery里的方法。感興趣的朋友可以參考下2015-10-10JQuery實現(xiàn)動態(tài)適時改變字體顏色的方法
這篇文章主要介紹了JQuery實現(xiàn)動態(tài)適時改變字體顏色的方法,實例分析了jQuery操作鼠標(biāo)事件及顏色的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03jQuery插件slick實現(xiàn)響應(yīng)式移動端幻燈片圖片切換特效
jQuery插件slick是一款響應(yīng)式、適用于移動設(shè)備觸摸屏、可滑動顯示的jQuery幻燈片插件。該幻燈片插件可以設(shè)置多種顯示效果,可以自動播放,是一款移動優(yōu)先的jQuery幻燈片插件。2015-04-04JQuery 1.6發(fā)布 性能提升,同時包含大量破壞性變更
JQuery 1.6剛剛發(fā)布了,有幾處性能和跨瀏覽器兼容性的改進(jìn),專門重寫了屬性模塊2011-05-05