成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

JqueryAjax請求文件下載操作失敗的原因以及解決方案

本篇內(nèi)容主要講解“Jquery Ajax請求文件下載操作失敗的原因以及解決方案”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Jquery Ajax請求文件下載操作失敗的原因以及解決方案”吧!

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比康樂網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式康樂網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋康樂地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

jQuery確實(shí)是一個(gè)挺好的輕量級(jí)的JS框架,能幫助我們快速的開發(fā)JS應(yīng)用,并在一定程度上改變了我們寫JavaScript代碼的習(xí)慣。

廢話少說,直接進(jìn)入正題,我們先來分析一下失敗的原因

一、失敗的原因

那是因?yàn)閞esponse原因,一般請求瀏覽器是會(huì)處理服務(wù)器輸出的response,例如生成png、文件下載等,然而ajax請求只是個(gè)“字符型”的請求,即請求的內(nèi)容是以文本類型存放的。文件的下載是以二進(jìn)制形式進(jìn)行的,雖然可以讀取到返回的response,但只是讀取而已,是無法執(zhí)行的,說白點(diǎn)就是js無法調(diào)用到瀏覽器的下載處理機(jī)制和程序。

二、解決方案

1)可以使用jquery創(chuàng)建表單并提交實(shí)現(xiàn)文件下載;

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標(biāo)簽實(shí)現(xiàn)文件下載;

<a href=”下載地址”>點(diǎn)擊下載</a>

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

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

使用jQuery的$.ajax方法可以更為詳細(xì)的控制AJAX請求。它在AJAX請求上施加細(xì)粒度級(jí)別的控制。

$.ajax方法語法

$.ajax(options)

參數(shù)

 

options

(對象)一個(gè)對象的實(shí)例,其屬性定義這個(gè)操作的參數(shù)。詳情見下表。

返回值

XHR實(shí)例

options詳細(xì)范圍值

名稱

類型

描述

url

字符串

請求的url地址

type

字符串

將要使用的HTTP方法。通常是POST或GET。如果省略,則默認(rèn)為GET

data

對象

一個(gè)對象,其屬性作為查詢參數(shù)而傳遞請求。如果是GET請求,則把數(shù)據(jù)作為查詢字符串傳遞;如果是POST請求,則把數(shù)據(jù)作為請求體傳遞。在這兩種情況下,都是由$.ajax()實(shí)用工具函數(shù)來處理值的編碼

dataType

字符串

一個(gè)關(guān)鍵字,用來標(biāo)識(shí)預(yù)期將被響應(yīng)所返回的數(shù)據(jù)的類型。這個(gè)值決定再把數(shù)據(jù)傳遞給回調(diào)函數(shù)之前(如果有)進(jìn)行什么后續(xù)處理。有效值如下:

xml-響應(yīng)文本被解析為XML文檔,而作為結(jié)果的XML DOM被傳遞給回調(diào)函數(shù)

html-響應(yīng)文本未經(jīng)處理就被傳遞給回調(diào)函數(shù)。在已返回HTML片段內(nèi)的任何<script>塊將被求值

json-響應(yīng)文本被求值為JSON字符串,而作為結(jié)果的對象被傳遞給回調(diào)函數(shù)

jsonp-與json相似,不同之處是提供遠(yuǎn)程腳本支持(假定遠(yuǎn)程服務(wù)器支持)

script-響應(yīng)文本被傳遞給回調(diào)函數(shù)。在任何回調(diào)函數(shù)被調(diào)用之前,響應(yīng)被作為一個(gè)或多個(gè)JavaScript語句而進(jìn)行處理

text-響應(yīng)文本被假定為普通文本。服務(wù)器資源負(fù)責(zé)設(shè)置適當(dāng)?shù)膬?nèi)容類型響應(yīng)標(biāo)頭。如果省略這個(gè)屬性,則不對響應(yīng)文本進(jìn)行任何處理或求值就傳遞給回調(diào)函數(shù)

timeout

數(shù)值

設(shè)置Ajax請求的超時(shí)值(毫秒)。如果請求在超時(shí)值到期之前仍未完成,則中止請求并且調(diào)用錯(cuò)誤回調(diào)函數(shù)(如果已定義)

global

布爾型

啟用或禁用全局函數(shù)的觸發(fā)。這些函數(shù)可以附加到元素上,并且在Ajax調(diào)用的不同時(shí)刻或狀態(tài)下觸發(fā)。默認(rèn)啟用全局函數(shù)觸發(fā)

contentType

字符串

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

success

函數(shù)

如果請求的響應(yīng)指示成功狀態(tài)碼,則這個(gè)函數(shù)被調(diào)用。響應(yīng)體作為第一個(gè)參數(shù)被返回給這個(gè)函數(shù),并且根據(jù)指定的dataType屬性進(jìn)行。第二個(gè)參數(shù)是包含狀態(tài)碼的字符串—這種情況下永遠(yuǎn)為成功狀態(tài)碼

error

函數(shù)

如果請求的響應(yīng)返回錯(cuò)誤狀態(tài)碼,則這個(gè)函數(shù)被調(diào)用。三個(gè)實(shí)參被傳遞給這個(gè)函數(shù):XHR實(shí)例、狀態(tài)消息字符串(在這種情況下永遠(yuǎn)為錯(cuò)誤狀態(tài)碼)以及XHR實(shí)例所返回的異常對象(可選)

complete

函數(shù)

請求完成時(shí)被調(diào)用。兩個(gè)實(shí)參被傳遞:XHR實(shí)例和狀態(tài)消息字符串(成功狀態(tài)碼或錯(cuò)誤狀態(tài)碼)。如果也指定了success或error回調(diào)函數(shù),則這個(gè)函數(shù)在success或error回調(diào)函數(shù)調(diào)用之后被調(diào)用

beforeSend

函數(shù)

在發(fā)起請求之前被調(diào)用。這個(gè)函數(shù)被傳遞XHR實(shí)例,并且可以用來設(shè)置自定義的標(biāo)頭或執(zhí)行其他預(yù)請求操作

async

布爾型

如果指定為false,則請求被提交為同步請求。在默認(rèn)的情況下,請求是異步的

processData

布爾型

如果設(shè)置為false,則阻止已傳遞數(shù)據(jù)被加工為URL編碼格式。默認(rèn)情況下,數(shù)據(jù)被加工為URL編碼格式(適用于類型為application/x-www-form-urlencoded的請求)

ifModified

布爾型

如果設(shè)置為true,則自從上一次請求以來,只有在響應(yīng)內(nèi)容沒有改變的情況下(根據(jù)Last-Modified標(biāo)頭)才允許請求成功。如果省略,則不執(zhí)行標(biāo)頭檢查

下面看個(gè)例子,盡可能多的用到options中的選項(xiàng)

客戶端代碼:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$().ready(function () {
  $('#selectNum').change(function () {
    var idValue = $(this).val();
    var show = $('#show');
    $.ajax({
      url: 'Server.aspx',
      type: 'POST',
      data: { id: idValue },
      //調(diào)小超時(shí)時(shí)間會(huì)引起異常
      timeout: 3000,
      //請求成功后觸發(fā)
      success: function (data) { show.append('success invoke!' + data+'<br/>'); },
      //請求失敗遇到異常觸發(fā)
      error: function (xhr, errorInfo, ex) { show.append('error invoke!errorInfo:' + errorInfo+'<br/>'); },
      //完成請求后觸發(fā)。即在success或error觸發(fā)后觸發(fā)
      complete: function (xhr, status) { show.append('complete invoke! status:' + status+'<br/>'); },
      //發(fā)送請求前觸發(fā)
      beforeSend: function (xhr) {
      //可以設(shè)置自定義標(biāo)頭
      xhr.setRequestHeader('Content-Type', 'application/xml;charset=utf-8');
      show.append('beforeSend invoke!' +'<br/>');
      },
      //是否使用異步發(fā)送
      async: true
    })
  });
})
</script>
</head>
<body>
<select id="selectNum">
  <option value="0">--Select--</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<div id="show"></div>
</body>
</html>

服務(wù)端主要代碼:

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    if (Request["id"] != null && !string.IsNullOrEmpty(Request["id"].ToString()))
    {
      //啟用該句會(huì)引發(fā)ajax超時(shí)異常
      // System.Threading.Thread.Sleep(3000);
      Response.Write(GetData(Request["id"].ToString()));
    }
  }
}
protected string GetData(string id)
{
  string str = string.Empty;
  switch (id)
  {
    case "1":
      str += "This is Number 1";
      break;
    case "2":
      str += "This is Number 2";
      break;
    case "3":
      str += "This is Number 3";
      break;
    default:
      str += "Warning Other Number!";
      break;
  }
  return str;
}

運(yùn)行程序,結(jié)果如圖:

Jquery Ajax請求文件下載操作失敗的原因以及解決方案

到此,相信大家對“Jquery Ajax請求文件下載操作失敗的原因以及解決方案”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁名稱:JqueryAjax請求文件下載操作失敗的原因以及解決方案
文章位置:http://jinyejixie.com/article30/gpsdpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、App開發(fā)外貿(mào)網(wǎng)站建設(shè)、虛擬主機(jī)網(wǎng)站排名、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)