Heim  >  Artikel  >  Web-Frontend  >  Analyse und Lösungen für die Fehlerursachen beim Herunterladen der Jquery Ajax-Anforderungsdatei

Analyse und Lösungen für die Fehlerursachen beim Herunterladen der Jquery Ajax-Anforderungsdatei

亚连
亚连Original
2018-05-24 14:55:292158Durchsuche

jQuery ist in der Tat ein sehr gutes, leichtes JS-Framework, das uns dabei helfen kann, schnell JS-Anwendungen zu entwickeln, und es hat in gewissem Maße unsere Gewohnheit, JavaScript-Code zu schreiben, geändert. Dieser Artikel konzentriert sich auf die Einführung der JQuery-Ajax-Anforderungsdateianalyse Freunde, die an der Analyse der Gründe für das Scheitern von Ajax-Anfragen interessiert sind, sollten gemeinsam lernen

jQuery ist in der Tat ein sehr gutes, leichtes JS-Framework, das uns bei der schnellen Entwicklung von JS-Anwendungen helfen kann. und bis zu einem gewissen Grad hat es unsere Gewohnheit, JavaScript-Code zu schreiben, verändert.

Hören Sie auf, Unsinn zu reden, und kommen Sie zur Sache.

Gründe für das Scheitern

Das liegt an der Reaktion Im Allgemeinen verarbeitet der anfordernde Browser die vom Server ausgegebene Antwort, z. B. das Generieren von PNG, das Herunterladen von Dateien usw. Bei der Ajax-Anfrage handelt es sich jedoch nur um eine „Zeichentyp“-Anfrage, dh der angeforderte Inhalt wird im Texttyp gespeichert . Der Download der Datei erfolgt in binärer Form. Obwohl die zurückgegebene Antwort gelesen werden kann, kann js den Download-Verarbeitungsmechanismus und das Programm des Browsers nicht aufrufen.

2. Lösung

1) Sie können jquery verwenden, um ein Formular zu erstellen und es zum Dateidownload einzureichen;

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) Sie können direkt Verwenden Sie das Tag a, um es zu implementieren. Datei herunterladen.

564207a1bac9ecce124ee07e0be15e25Zum Herunterladen klicken5db79b134e9f6b82c0b36e0489ee08ed

3) Verwenden Sie zum Lösen einen versteckten Iframe oder ein neues Formular .

PS: Verwendung der AJAX-Anfrage-Methode $.ajax

Verwenden Sie die $.ajax-Methode von jQuery, um AJAX-Anfragen detaillierter zu steuern. Es übt eine differenzierte Kontrolle über AJAX-Anfragen aus.

Syntax der $.ajax-Methode

processDataifModified

下面看个例子,尽可能多的用到options中的选项

客户端代码:

<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 () {
  $(&#39;#selectNum&#39;).change(function () {
    var idValue = $(this).val();
    var show = $(&#39;#show&#39;);
    $.ajax({
      url: &#39;Server.aspx&#39;,
      type: &#39;POST&#39;,
      data: { id: idValue },
      //调小超时时间会引起异常
      timeout: 3000,
      //请求成功后触发
      success: function (data) { show.append(&#39;success invoke!&#39; + data+&#39;<br/>&#39;); },
      //请求失败遇到异常触发
      error: function (xhr, errorInfo, ex) { show.append(&#39;error invoke!errorInfo:&#39; + errorInfo+&#39;<br/>&#39;); },
      //完成请求后触发。即在success或error触发后触发
      complete: function (xhr, status) { show.append(&#39;complete invoke! status:&#39; + status+&#39;<br/>&#39;); },
      //发送请求前触发
      beforeSend: function (xhr) {
      //可以设置自定义标头
      xhr.setRequestHeader(&#39;Content-Type&#39;, &#39;application/xml;charset=utf-8&#39;);
      show.append(&#39;beforeSend invoke!&#39; +&#39;<br/>&#39;);
      },
      //是否使用异步发送
      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>
<p id="show"></p>
</body>
</html>

服务端主要代码:

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    if (Request["id"] != null && !string.IsNullOrEmpty(Request["id"].ToString()))
    {
      //启用该句会引发ajax超时异常
      // 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;
}

运行程序,结果如图:

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法

基于h5的history改善ajax列表请求体验

简单谈谈AJAX核心对象

$.ajax(options)

$.ajax(options)

参数

 

options

(对象)一个对象的实例,其属性定义这个操作的参数。详情见下表。

返回值

XHR实例

Parameter

options (object) Eine Instanz eines Objekts, dessen Eigenschaften die Parameter dieser Operation definieren. Einzelheiten finden Sie in der Tabelle unten.
Rückgabewert

Name

Typ

Beschreibung

URL

String

Angeforderte URL-Adresse

Typ

Zeichenfolge

Zu verwendende HTTP-Methode. Normalerweise POST oder GET. Wenn es weggelassen wird, wird standardmäßig GET

data

object

verwendet Ein Objekt, dessen Eigenschaften als Abfrageparameter an die Anfrage übergeben werden. Wenn es sich um eine GET-Anfrage handelt, werden die Daten als Abfragezeichenfolge übergeben; wenn es sich um eine POST-Anfrage handelt, werden die Daten als Anforderungstext übergeben. In beiden Fällen wird die Kodierung des Werts von der Dienstprogrammfunktion $.ajax()

übernommen

dataType

String

Ein Schlüsselwort zur Identifizierung des erwarteten Typs von Daten, die in der Antwort zurückgegeben werden. Dieser Wert bestimmt, welche nachfolgende Verarbeitung (falls vorhanden) durchgeführt wird, bevor die Daten an die Rückruffunktion übergeben werden. Gültige Werte sind:

xml – der Antworttext wird in ein XML-Dokument geparst und das resultierende XML-DOM wird an die Rückruffunktion übergeben

html – der Antworttext wird an den Rückruf übergeben Funktion unbearbeitet. Alle 3f1c4e4b6b16bbbd69b2ee476dc4f83a-Blöcke innerhalb des zurückgegebenen HTML-Fragments werden ausgewertet

json – der Antworttext wird als JSON-Zeichenfolge ausgewertet und das resultierende Objekt wird an die Rückruffunktion übergeben

jsonp – Ähnlich wie JSON, bietet jedoch Remote-Skriptunterstützung (Remote-Server-Unterstützung vorausgesetzt) ​​

script – Der Antworttext wird an die Rückruffunktion übergeben. Bevor eine Rückruffunktion aufgerufen wird, wird die Antwort als eine oder mehrere JavaScript-Anweisungen verarbeitet.

Text – Es wird davon ausgegangen, dass es sich beim Antworttext um normalen Text handelt. Die Serverressource ist für das Festlegen des entsprechenden Inhaltstyp-Antwortheaders verantwortlich. Wenn dieses Attribut weggelassen wird, wird der Antworttext ohne Verarbeitung oder Auswertung an die Callback-Funktion übergeben

Timeout

Wert

Legen Sie den Timeout-Wert (Millisekunden) der Ajax-Anfrage fest. Wenn die Anfrage nicht vor Ablauf des Timeout-Werts abgeschlossen wird, wird die Anfrage abgebrochen und die Fehler-Callback-Funktion (falls definiert) wird

global

Boolean

Aktivieren oder deaktivieren Sie das Auslösen globaler Funktionen. Diese Funktionen können an Elemente angehängt und bei Ajax-Aufrufen zu unterschiedlichen Zeiten oder Zuständen ausgelöst werden. Die globale Funktionsauslösung ist standardmäßig aktiviert

contentType

String

Der Inhaltstyp, der in der Anfrage angegeben werden soll. Standardmäßig ist application/x-www-form-urlencoded (identisch mit dem Standardtyp, der für die Formularübermittlung verwendet wird)

Erfolg

Funktion

Diese Funktion wird aufgerufen, wenn die Antwort auf die Anfrage einen Erfolgsstatuscode anzeigt. Der Antworttext wird als erster Parameter an diese Funktion zurückgegeben und basiert auf dem angegebenen dataType-Attribut. Der zweite Parameter ist eine Zeichenfolge, die den Statuscode enthält – in diesem Fall immer den Erfolgsstatuscode

error

Funktion

Diese Funktion wird aufgerufen, wenn die Antwort auf die Anfrage einen Fehlerstatuscode zurückgibt. An diese Funktion werden drei Argumente übergeben: die XHR-Instanz, die Statusmeldungszeichenfolge (in diesem Fall immer der Fehlerstatuscode) und das von der XHR-Instanz zurückgegebene Ausnahmeobjekt (optional)

abgeschlossen

Funktion

wird aufgerufen, wenn die Anfrage abgeschlossen ist. Es werden zwei Argumente übergeben: die XHR-Instanz und die Statusmeldungszeichenfolge (Erfolgsstatuscode oder Fehlerstatuscode). Wenn auch die Erfolgs- oder Fehler-Callback-Funktion angegeben ist, wird diese Funktion aufgerufen, nachdem die Erfolgs- oder Fehler-Callback-Funktion aufgerufen wurde

beforeSend

Funktion

wird aufgerufen, bevor die Anfrage gestellt wird. Dieser Funktion wird eine XHR-Instanz übergeben und sie kann verwendet werden, um benutzerdefinierte Header festzulegen oder andere Vorab-Anforderungsvorgänge auszuführen

asynchron >

Boolean

Wenn false angegeben ist, wird die Anfrage als synchrone Anfrage übermittelt. Standardmäßig sind Anfragen asynchron

Boolean

Wenn der Wert auf „false“ gesetzt ist, wird verhindert, dass die übergebenen Daten in ein URL-codiertes Format verarbeitet werden. Standardmäßig werden die Daten im URL-codierten Format verarbeitet (gilt für Anfragen vom Typ application/x-www-form-urlencoded)

Boolean

Wenn auf true gesetzt, nur, wenn sich der Antwortinhalt seit der letzten Anfrage (gemäß dem Last-Modified-Flag-Header) nicht geändert hat Lassen Sie zu, dass die Anfrage erfolgreich ist. Wenn es weggelassen wird, wird keine Headerprüfung durchgeführt

Das obige ist der detaillierte Inhalt vonAnalyse und Lösungen für die Fehlerursachen beim Herunterladen der Jquery Ajax-Anforderungsdatei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn