JQuery 實(shí)現(xiàn)文件下載的常用方法分析
本文實(shí)例講述了JQuery 實(shí)現(xiàn)文件下載的常用方法。分享給大家供大家參考,具體如下:
GET方式
window.location.href = url;
POST方式
var url = "下載接口地址";
// 構(gòu)造隱藏的form表單
var $form = $("<form id='download' class='hidden' method='post'></form>");
$form.attr("url",url);
$(body).append($form);
// 添加提交參數(shù)
var $input1 = $("<input name='param1' type='text'></input>");
$input1.attr("value","參數(shù)值1");
$("#download").append($input1);
var $input2 = $("<input name='param2' type='text'></input>");
$input1.attr("value","參數(shù)值2");
$("#download").append($input2);
// 提交表單
$form.submit();
ajax為什么不能下載文件

ajax支持的服務(wù)器返回數(shù)據(jù)類型有:xml、json、script、html,其他類型(例如二進(jìn)制流)將被作為String返回,無法觸發(fā)瀏覽器的下載處理機(jī)制和程序。
// ajax將返回數(shù)據(jù)轉(zhuǎn)換為string,再利用該string創(chuàng)建Blob對象,下載的文件無法正確打開,數(shù)據(jù)可能已經(jīng)被破壞
var blob = new Blob([data]);
//對于Blob對象,我們可以創(chuàng)建出一個URL來訪問它。使用URL對象的createObjectURL方法。
var a = document.createElement('a');
a.download = 'data.doc';
a.href=window.URL.createObjectURL(blob);
a.click()
HTML5 Blob對象
一直以來,JS都沒有比較好的可以直接處理二進(jìn)制的方法。而Blob的存在,允許我們可以通過JS直接操作二進(jìn)制數(shù)據(jù)。Blob對象可以看做是存放二進(jìn)制數(shù)據(jù)的容器。
創(chuàng)建Blob對象
var blob = new Blob(dataArr:Array<any>, opt:{type:string,endings:string});
- dataArr:數(shù)組,包含了要添加到Blob對象中的數(shù)據(jù)。數(shù)據(jù)可以是任意多個ArrayBuffer,ArrayBufferView, Blob,或者 DOMString對象。
- opt:對象,包含兩個屬性
- type:用于設(shè)置Blob對象的屬性(如:MIME類型)
- endings :(已廢棄),設(shè)置BlobBuilder.append() 方法的endings參數(shù),取值"transparent"或"native"
// 例如創(chuàng)建一個裝填DOMString對象的Blob對象
var data='<b style="font-size:32px;color:red;">Blob</b>';
var blob=new Blob([data],{"type":"text/html"});
console.log(blob);
xmlhttprequest 2 + Blob 實(shí)現(xiàn)文件下載
xmlhttprequest 2 標(biāo)準(zhǔn)支持流文件,使用 xhr.response作為返回(不是responseText)
var url = "";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);//get請求,請求地址,是否異步
xhr.responseType = "blob"; // 返回類型blob
xhr.onload = function () {// 請求完成處理函數(shù)
if (this.status === 200) {
var blob = this.response;// 獲取返回值
var a = document.createElement('a');
a.download = 'data.doc';
a.href=window.URL.createObjectURL(blob);
a.click();
}
};
// 發(fā)送ajax請求
xhr.send();
更多關(guān)于jQuery相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《jQuery頁面元素操作技巧匯總》、《jQuery常見事件用法與技巧總結(jié)》、《jQuery常用插件及用法總結(jié)》、《jQuery擴(kuò)展技巧總結(jié)》及《jquery選擇器用法總結(jié)》
希望本文所述對大家jQuery程序設(shè)計有所幫助。
相關(guān)文章
jquery radio 動態(tài)控制選中失效問題的解決方法
下面小編就為大家分享一篇jquery radio 動態(tài)控制選中失效問題的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
DIV+CSS+jQ實(shí)現(xiàn)省市聯(lián)動可擴(kuò)展
這篇文章主要介紹了DIV+CSS+jQ實(shí)現(xiàn)省市聯(lián)動可擴(kuò)展方法的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06
通過jquery還原含有rowspan、colspan的table的實(shí)現(xiàn)方法
通過jquery還原含有rowspan、colspan的table的實(shí)現(xiàn)方法,學(xué)習(xí)jquery的朋友可以參考下2012-02-02
使用jquery判斷一個元素是否含有一個指定的類(class)實(shí)例
下面小編就為大家?guī)硪黄褂胘query判斷一個元素是否含有一個指定的類(class)實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
jquery實(shí)現(xiàn)上傳文件大小類型的驗(yàn)證例子(推薦)
下面小編就為大家?guī)硪黄猨query實(shí)現(xiàn)上傳文件大小類型的驗(yàn)證例子(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨想過來看看吧2016-06-06
jQuery實(shí)現(xiàn)當(dāng)前頁面標(biāo)簽高亮顯示的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)當(dāng)前頁面標(biāo)簽高亮顯示的方法,涉及jQuery通過自定義函數(shù)操作css樣式的技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-03-03
jQuery防止click雙擊多次提交及傳遞動態(tài)函數(shù)或多參數(shù)
這篇文章主要介紹了jQuery防止click雙擊多次提交及傳遞動態(tài)函數(shù)方法,需要的朋友可以參考下2014-04-04

