Jquery Ajax請求文件下載操做失敗的緣由分析及解決辦法(轉載)

jQuery確實是一個挺好的輕量級的JS框架,能幫助咱們快速的開發JS應用,並在必定程度上改變了咱們寫JavaScript代碼的習慣。html

1、失敗的緣由jquery

那是由於response緣由,通常請求瀏覽器是會處理服務器輸出的response,例如生成png、文件下載等,然而ajax請求只是個「字符型」的請求,即請求的內容是以文本類型存放的。文件的下載是以二進制形式進行的,雖然能夠讀取到返回的response,但只是讀取而已,是沒法執行的,說白點就是js沒法調用到瀏覽器的下載處理機制和程序。ajax

2、解決方案json

1)可使用jquery建立表單並提交實現文件下載;瀏覽器

var form = $("<form>"); form.attr("style","display:none"); form.attr("target",""); form.attr("method","post"); form.attr("action",rootPath + "T_academic_essay/DownloadZipFile.do"); var input1 = $("<input>"); input1.attr("type","hidden"); input1.attr("name","strZipPath"); input1.attr("value",strZipPath); $("body").append(form); form.append(input1); form.submit(); form.remove();服務器

2)能夠直接使用a標籤實現文件下載;app

<a href=」下載地址」>點擊下載</a>框架

3)使用隱藏iframe或新窗體解決。異步

PS:AJAX請求 $.ajax方法的使用async

使用jQuery的$.ajax方法能夠更爲詳細的控制AJAX請求。它在AJAX請求上施加細粒度級別的控制。

$.ajax方法語法

$.ajax(options)

參數

options

(對象)一個對象的實例,其屬性定義這個操做的參數。詳情見下表。

返回值

XHR實例

options詳細範圍值

名稱

類型

描述

url

字符串

請求的url地址

type

字符串

將要使用的HTTP方法。一般是POST或GET。若是省略,則默認爲GET

data

對象

一個對象,其屬性做爲查詢參數而傳遞請求。若是是GET請求,則把數據做爲查詢字符串傳遞;若是是POST請求,則把數據做爲請求體傳遞。在這兩種狀況下,都是由$.ajax()實用工具函數來處理值的編碼

dataType

字符串

一個關鍵字,用來標識預期將被響應所返回的數據的類型。這個值決定再把數據傳遞給回調函數以前(若是有)進行什麼後續處理。有效值以下:

xml-響應文本被解析爲XML文檔,而做爲結果的XML DOM被傳遞給回調函數

html-響應文本未經處理就被傳遞給回調函數。在已返回HTML片斷內的任何<script>塊將被求值

json-響應文本被求值爲JSON字符串,而做爲結果的對象被傳遞給回調函數

jsonp-與json類似,不一樣之處是提供遠程腳本支持(假定遠程服務器支持)

script-響應文本被傳遞給回調函數。在任何回調函數被調用以前,響應被做爲一個或多個JavaScript語句而進行處理

text-響應文本被假定爲普通文本。服務器資源負責設置適當的內容類型響應標頭。若是省略這個屬性,則不對響應文本進行任何處理或求值就傳遞給回調函數

timeout

數值

設置Ajax請求的超時值(毫秒)。若是請求在超時值到期以前仍未完成,則停止請求而且調用錯誤回調函數(若是已定義)

global

布爾型

啓用或禁用全局函數的觸發。這些函數能夠附加到元素上,而且在Ajax調用的不一樣時刻或狀態下觸發。默認啓用全局函數觸發

contentType

字符串

將要在請求上指定的內容類型。默認爲application/x-www-form-urlencoded(與表單提交所使用的默認類型相同)

success

函數

若是請求的響應指示成功狀態碼,則這個函數被調用。響應體做爲第一個參數被返回給這個函數,而且根據指定的dataType屬性進行。第二個參數是包含狀態碼的字符串—這種狀況下永遠爲成功狀態碼

error

函數

若是請求的響應返回錯誤狀態碼,則這個函數被調用。三個實參被傳遞給這個函數:XHR實例、狀態消息字符串(在這種狀況下永遠爲錯誤狀態碼)以及XHR實例所返回的異常對象(可選)

complete

函數

請求完成時被調用。兩個實參被傳遞:XHR實例和狀態消息字符串(成功狀態碼或錯誤狀態碼)。若是也指定了success或error回調函數,則這個函數在success或error回調函數調用以後被調用

beforeSend

函數

在發起請求以前被調用。這個函數被傳遞XHR實例,而且能夠用來設置自定義的標頭或執行其餘預請求操做

async

布爾型

若是指定爲false,則請求被提交爲同步請求。在默認的狀況下,請求是異步的

processData

布爾型

若是設置爲false,則阻止已傳遞數據被加工爲URL編碼格式。默認狀況下,數據被加工爲URL編碼格式(適用於類型爲application/x-www-form-urlencoded的請求)

ifModified

布爾型

若是設置爲true,則自從上一次請求以來,只有在響應內容沒有改變的狀況下(根據Last-Modified標頭)才容許請求成功。若是省略,則不執行標頭檢查

下面看個例子,儘量多的用到options中的選項

相關文章
相關標籤/搜索