JQuery的ajax函數的返回類型只有xml、text、json、html等類型,沒有「流」類型,因此咱們要實現ajax下載,不可以使用相應的ajax函數進行文件下載。但能夠用js生成一個form,用這個form提交參數,並返回「流」類型的數據。在實現過程當中,頁面也沒有進行刷新。html
1. 使用ajax,ajax的返回值類型是json,text,html,xml類型,或者能夠說ajax的發送,接受都只能是string字符串,不能流類型,因此沒法實現文件下載,強用會出現response衝突。若是非要使用ajax的話,只能經過返回值獲得生成的文件相關url。而後在回調函數裏經過建立一個iframe,並設置其src值爲文件url,或者一個對文件生成流的處理url,這樣操做來實現文件下載且頁面無刷新。web
2. 不使用ajax,經過dom動態操做或建立iframe,form的方式來實現,在下載文件的同時實現頁面不刷新,其中iframe的src能夠是文件地址url來直接下載文件,也能夠是流處理url經過response流輸出下載,form的是流處理url經過response流輸出下載,dom動態操做的時候實現文件下載,且頁面無刷新。要在下載的同時實現進度條的話,能夠建立一個定時任務,每隔必定時間就向後臺發送請求,經過公用的對象,好比session,來取得文件下載的處理進度。ajax
var form=$("<form>");//定義一個form表單
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action","exportData");
var input1=$("<input>");
input1.attr("type","hidden");
input1.attr("name","exportData");
input1.attr("value",(new Date()).getMilliseconds());
$("body").append(form);//將表單放置在web中
form.append(input1);json
form.submit();//表單提交 session