1. 程式人生 > >JQuery $.ajax 如何捕獲異常資訊

JQuery $.ajax 如何捕獲異常資訊

下面是Jquery中AJAX引數詳細列表:

引數名 型別 描述
url String (預設: 當前頁地址) 傳送請求的地址。
type String (預設: "GET") 請求方式 ("POST" 或 "GET"), 預設為 "GET"。注意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支援。
timeout Number 設定請求超時時間(毫秒)。此設定將覆蓋全域性設定。
async Boolean (預設: true) 預設設定下,所有請求均為非同步請求。如果需要傳送同步請求,請將此選項設定為 false。注意,同步請求將鎖住瀏覽器,使用者其它操作必須等待請求完成才可以執行。
beforeSend Function 傳送請求前可修改 XMLHttpRequest 物件的函式,如新增自定義 HTTP 頭。XMLHttpRequest 物件是唯一的引數。
function (XMLHttpRequest) {
  this; // the options for this ajax request
}
cache Boolean (預設: true) jQuery 1.2 新功能,設定為 false 將不會從瀏覽器快取中載入請求資訊。
complete Function 請求完成後回撥函式 (請求成功或失敗時均呼叫)。引數: XMLHttpRequest 物件,成功資訊字串。
function
(XMLHttpRequest, textStatus) { this; // the options for this ajax request }
contentType String (預設: "application/x-www-form-urlencoded") 傳送資訊至伺服器時內容編碼型別。預設值適合大多數應用場合。
data Object,
String
傳送到伺服器的資料。將自動轉換為請求字串格式。GET 請求中將附加在 URL 後。檢視 processData 選項說明以禁止此自動轉換。必須為 Key/Value 格式。如果為陣列,jQuery 將自動為不同值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換為 '&foo=bar1&foo=bar2'。
dataType String

預期伺服器返回的資料型別。如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊返回 responseXML 或 responseText,並作為回撥函式引數傳遞,可用值:

"xml": 返回 XML 文件,可用 jQuery 處理。

"html": 返回純文字 HTML 資訊;包含 script 元素。

"script": 返回純文字 JavaScript 程式碼。不會自動快取結果。

"json": 返回 JSON 資料 。

"jsonp": JSONP 格式。使用 JSONP 形式呼叫函式時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函式名,以執行回撥函式。

error Function (預設: 自動判斷 (xml 或 html)) 請求失敗時將呼叫此方法。這個方法有三個引數:XMLHttpRequest 物件,錯誤資訊,(可能)捕獲的錯誤物件。
function (XMLHttpRequest, textStatus, errorThrown) {
  // 通常情況下textStatus和errorThown只有其中一個有值 
  this; // the options for this ajax request
}
global Boolean (預設: true) 是否觸發全域性 AJAX 事件。設定為 false 將不會觸發全域性 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用於控制不同的Ajax事件
ifModified Boolean (預設: false) 僅在伺服器資料改變時獲取新資料。使用 HTTP 包 Last-Modified 頭資訊判斷。
processData Boolean (預設: true) 預設情況下,傳送的資料將被轉換為物件(技術上講並非字串) 以配合預設內容型別 "application/x-www-form-urlencoded"。如果要傳送 DOM 樹資訊或其它不希望轉換的資訊,請設定為 false。
success Function 請求成功後回撥函式。這個方法有兩個引數:伺服器返回資料,返回狀態
function (data, textStatus) {
  // data could be xmlDoc, jsonObj, html, text, etc...
  this; // the options for this ajax request
}

程式碼:$(document).ready(function() {
            jQuery("#clearCac").click(function() {
                jQuery.ajax({
                    url: "/Handle/Do.aspx",
                    type: "post",
                    data: { id: '0' },
                    dataType: "json",
                    success: function(msg) {
                        alert(msg);
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {

                      alert("儲存失敗;"+XmlHttpRequest.responseText);
                   alert(XMLHttpRequest.status);
                        alert(XMLHttpRequest.readyState);
                        alert(textStatus);

                    },
                    complete: function(XMLHttpRequest, textStatus) {
                        this; // 呼叫本次AJAX請求時傳遞的options引數
                    }
                });
            });
        });

 或者

在客戶端
//post
$j.ajax({
  type :"POST",
  url :url,
  data :modify,
  success :function(msg){
  .......//其他成功時的處理
  alert("儲存成功!");
  },
  //async :false,
  error:function(XmlHttpRequest,textStatus, errorThrown)
  {
  alert("儲存失敗;"+XmlHttpRequest.responseText);
  }
});

一、error:function (XMLHttpRequest, textStatus, errorThrown) 


(預設: 自動判斷 (xml 或 html)) 請求失敗時呼叫時間。引數有以下三個:XMLHttpRequest 物件、錯誤資訊、(可選)捕獲的錯誤物件。如果發生了錯誤,錯誤資訊(第二個引數)除了得到null之外,還可能是"timeout", "error", "notmodified" 和 "parsererror"。

textStatus:

 "timeout", "error", "notmodified" 和 "parsererror"。

二、error事件返回的第一個引數XMLHttpRequest有一些有用的資訊:

XMLHttpRequest.readyState:

狀態碼 

0 - (未初始化)還沒有呼叫send()方法 

1 - (載入)已呼叫send()方法,正在傳送請求 

2 - (載入完成)send()方法執行完成,已經接收到全部響應內容 

3 - (互動)正在解析響應內容 

4 - (完成)響應內容解析完成,可以在客戶端呼叫了

三、data:"{}", data為空也一定要傳"{}";不然返回的是xml格式的。並提示parsererror.

四、parsererror的異常和Header 型別也有關係。及編碼header('Content-type: text/html; charset=utf8');

五、XMLHttpRequest.status:
1xx-資訊提示  
這些狀態程式碼表示臨時的響應。客戶端在收到常規響應之前,應準備接收一個或多個1xx響應。  
100-繼續。  
101-切換協議。  
2xx-成功  
這類狀態程式碼表明伺服器成功地接受了客戶端請求。  
200-確定。客戶端請求已成功。  
201-已建立。  
202-已接受。  
203-非權威性資訊。  
204-無內容。  
205-重置內容。  
206-部分內容。  
3xx-重定向  
客戶端瀏覽器必須採取更多操作來實現請求。例如,瀏覽器可能不得不請求伺服器上的不同的頁面,或通過代理伺服器重複該請求。  
301-物件已永久移走,即永久重定向。  
302-物件已臨時移動。  
304-未修改。  
307-臨時重定向。  
4xx-客戶端錯誤  
發生錯誤,客戶端似乎有問題。例如,客戶端請求不存在的頁面,客戶端未提供有效的身份驗證資訊。400-錯誤的請求。  
401-訪問被拒絕。IIS定義了許多不同的401錯誤,它們指明更為具體的錯誤原因。這些具體的錯誤程式碼在瀏覽器中顯示,但不在IIS日誌中顯示:  
401.1-登入失敗。  
401.2-伺服器配置導致登入失敗。  
401.3-由於ACL對資源的限制而未獲得授權。  
401.4-篩選器授權失敗。  
401.5-ISAPI/CGI應用程式授權失敗。  
401.7–訪問被Web伺服器上的URL授權策略拒絕。這個錯誤程式碼為IIS6.0所專用。  
403-禁止訪問:IIS定義了許多不同的403錯誤,它們指明更為具體的錯誤原因:  
403.1-執行訪問被禁止。  
403.2-讀訪問被禁止。  
403.3-寫訪問被禁止。  
403.4-要求SSL。  
403.5-要求SSL128。  
403.6-IP地址被拒絕。  
403.7-要求客戶端證書。  
403.8-站點訪問被拒絕。  
403.9-使用者數過多。  
403.10-配置無效。  
403.11-密碼更改。  
403.12-拒絕訪問對映表。  
403.13-客戶端證書被吊銷。  
403.14-拒絕目錄列表。  
403.15-超出客戶端訪問許可。  
403.16-客戶端證書不受信任或無效。  
403.17-客戶端證書已過期或尚未生效。  
403.18-在當前的應用程式池中不能執行所請求的URL。這個錯誤程式碼為IIS6.0所專用。  
403.19-不能為這個應用程式池中的客戶端執行CGI。這個錯誤程式碼為IIS6.0所專用。  
403.20-Passport登入失敗。這個錯誤程式碼為IIS6.0所專用。  
404-未找到。  
404.0-(無)–沒有找到檔案或目錄。  
404.1-無法在所請求的埠上訪問Web站點。  
404.2-Web服務擴充套件鎖定策略阻止本請求。  
404.3-MIME對映策略阻止本請求。  
405-用來訪問本頁面的HTTP謂詞不被允許(方法不被允許)  
406-客戶端瀏覽器不接受所請求頁面的MIME型別。  
407-要求進行代理身份驗證。  
412-前提條件失敗。  
413–請求實體太大。  
414-請求URI太長。  
415–不支援的媒體型別。  
416–所請求的範圍無法滿足。  
417–執行失敗。  
423–鎖定的錯誤。  
5xx-伺服器錯誤  
伺服器由於遇到錯誤而不能完成該請求。  
500-內部伺服器錯誤。  
500.12-應用程式正忙於在Web伺服器上重新啟動。  
500.13-Web伺服器太忙。  
500.15-不允許直接請求Global.asa。  
500.16–UNC授權憑據不正確。這個錯誤程式碼為IIS6.0所專用。  
500.18–URL授權儲存不能開啟。這個錯誤程式碼為IIS6.0所專用。  
500.100-內部ASP錯誤。  
501-頁首值指定了未實現的配置。  
502-Web伺服器用作閘道器或代理伺服器時收到了無效響應。  
502.1-CGI應用程式超時。  
502.2-CGI應用程式出錯。application.  
503-服務不可用。這個錯誤程式碼為IIS6.0所專用。  
504-閘道器超時。  
505-HTTP版本不受支援。  
FTP  
1xx-肯定的初步答覆  
這些狀態程式碼指示一項操作已經成功開始,但客戶端希望在繼續操作新命令前得到另一個答覆。  
110重新啟動標記答覆。  
120服務已就緒,在nnn分鐘後開始。  
125資料連線已開啟,正在開始傳輸。  
150檔案狀態正常,準備開啟資料連線。  
2xx-肯定的完成答覆  
一項操作已經成功完成。客戶端可以執行新命令。200命令確定。  
202未執行命令,站點上的命令過多。  
211系統狀態,或系統幫助答覆。  
212目錄狀態。  
213檔案狀態。  
214幫助訊息。  
215NAME系統型別,其中,NAME是AssignedNumbers文件中所列的正式系統名稱。  
220服務就緒,可以執行新使用者的請求。  
221服務關閉控制連線。如果適當,請登出。  
225資料連線開啟,沒有進行中的傳輸。  
226關閉資料連線。請求的檔案操作已成功(例如,傳輸檔案或放棄檔案)。  
227進入被動模式(h1,h2,h3,h4,p1,p2)。  
230使用者已登入,繼續進行。  
250請求的檔案操作正確,已完成。  
257已建立“PATHNAME”。  
3xx-肯定的中間答覆  
該命令已成功,但伺服器需要更多來自客戶端的資訊以完成對請求的處理。331使用者名稱正確,需要密碼。  
332需要登入帳戶。  
350請求的檔案操作正在等待進一步的資訊。  
4xx-瞬態否定的完成答覆  
該命令不成功,但錯誤是暫時的。如果客戶端重試命令,可能會執行成功。421服務不可用,正在關閉控制連線。如果服務確定它必須關閉,將向任何命令傳送這一應答。  
425無法開啟資料連線。  
426Connectionclosed;transferaborted.  
450未執行請求的檔案操作。檔案不可用(例如,檔案繁忙)。  
451請求的操作異常終止:正在處理本地錯誤。  
452未執行請求的操作。系統儲存空間不夠。  
5xx-永久性否定的完成答覆  
該命令不成功,錯誤是永久性的。如果客戶端重試命令,將再次出現同樣的錯誤。500語法錯誤,命令無法識別。這可能包括諸如命令列太長之類的錯誤。  
501在引數中有語法錯誤。  
502未執行命令。  
503錯誤的命令序列。  
504未執行該引數的命令。  
530未登入。  
532儲存檔案需要帳戶。  
550未執行請求的操作。檔案不可用(例如,未找到檔案,沒有訪問許可權)。  
551請求的操作異常終止:未知的頁面型別。  
552請求的檔案操作異常終止:超出儲存分配(對於當前目錄或資料集)。  
553未執行請求的操作。不允許的檔名。  
常見的FTP狀態程式碼及其原因  
150-FTP使用兩個埠:21用於傳送命令,20用於傳送資料。狀態程式碼150表示伺服器準備在埠20上開啟新連線,傳送一些資料。  
226-命令在埠20上開啟資料連線以執行操作,如傳輸檔案。該操作成功完成,資料連線已關閉。  
230-客戶端傳送正確的密碼後,顯示該狀態程式碼。它表示使用者已成功登入。  
331-客戶端傳送使用者名稱後,顯示該狀態程式碼。無論所提供的使用者名稱是否為系統中的有效帳戶,都將顯示該狀態程式碼。  
426-命令開啟資料連線以執行操作,但該操作已被取消,資料連線已關閉。  
530-該狀態程式碼表示使用者無法登入,因為使用者名稱和密碼組合無效。如果使用某個使用者帳戶登入,可能鍵入錯誤的使用者名稱或密碼,也可能選擇只允許匿名訪問。如果使用匿名帳戶登入,IIS的配置可能拒絕匿名訪問。  
550-命令未被執行,因為指定的檔案不可用。例如,要GET的檔案並不存在,或試圖將檔案PUT到您沒有寫入許可權的目錄。

其他例子:

在伺服器端的一般處理程式中
try
{
  ........ //業務程式碼
}
catch(Exception e)
{
  context.Response.ContentType = "text/plain";
  context.Response.StatusCode =500;
  context.Response.Write( e.Message);
  context.Response.End();
}
在客戶端
//post
$j.ajax({
  type :"POST",
  url :url,
  data :modify,
  success :function(msg){
  .......//其他成功時的處理
  alert("儲存成功!");
  },
  //async :false,
  error:function(XmlHttpRequest,textStatus, errorThrown)
  {
  alert("儲存失敗;"+XmlHttpRequest.responseText);
  }
});


相關推薦

JQuery $.ajax 如何捕獲異常資訊

下面是Jquery中AJAX引數詳細列表: 引數名 型別 描述 url String (預設: 當前頁地址) 傳送請求的地址。 type String (預設: "GET") 請求方式 ("POST" 或 "GET"), 預設為 "GET"。注意:其它 HTTP 請求方

Android App中多程序問題:捕獲異常資訊並重啟應用

 App crash原因以及解決辦法- https://blog.csdn.net/yangtuxiaojie/article/details/47123243 Android在程式崩潰或者捕獲異常之後重新啟動app- https://www.cnblogs.com/din

Python異常資訊捕獲和處理

什麼是異常 異常是一種影響程式執行的事件。當發生超出程式規則之外的事情時,程式就會“一臉懵逼”而卡在那裡,嚴重的程式甚至直接選擇奔潰。 異常的丟擲機制: 如果在執行時發生異常,直譯器會查詢相應的處理語句(稱為handler).要是在當前函式裡沒有找到的話,它會將異常傳遞

Android自定義全域性捕獲異常並上傳,實現實時收集APP崩潰crash資訊

一、異常收集 目的:在APP上線後,可能會出現一些BUG導致了APP的閃退,使用者體驗就非常致命,我們一定要第一時間找到問題的所在,去處理掉問題,處理有方法有兩種,一是發一個修改後的新版本,另一個是用熱修復釋出一個更新補丁,具體選擇哪一種符合自己需求就行。 我們主要說的異常

C# 應用程式,執行時異常資訊捕獲

示例: static class Program { /// <summary> /// 應用程式的主入口點。 /// </summary> [STAThread] static void Main()

android系統異常資訊捕獲處理

1.在Android中有的未知的Bug可能在測試中沒有及時發現,導致使用者在使用時出現程式奔潰,出現使用者體驗不好,而我們又不清楚的情況。android提供了Thread.UncaughtExceptionHandler介面,可以通過實現這個介面,在全域性中捕獲異常並處理,

Ajax獲取介面丟擲的異常資訊

一、介面丟擲的異常,如 throw new MyException(“我的自定義異常!”); 二、ajax請求 $.ajax({ type: “post”, url: url, d

【python】 使用sys.exc_info自己捕獲異常詳細資訊

Python 使用sys.exc_info自己捕獲異常詳細資訊 一般程式中,我們需要對異常進行捕獲來保證程式的健壯。但是debug的時候,我們可能需要異常的詳細資訊,這時可以使用sys.exec_info來處理: import traceback import sys try: raise Valu

Python捕獲異常堆疊資訊的幾種方法

程式出錯的時候,我們往往需要根據異常資訊來找到具體出錯的程式碼。簡單地用print列印異常資訊並不能很好地追溯出錯的程式碼: # -*- coding: utf-8 -*- def foo(a, b): c = a + b raise ValueErro

儲存過程——異常捕獲&列印異常資訊

- 目錄 - [0. 背景說明](#0-背景說明) - [1. 建立異常資訊表ErrorLog](#1-建立異常資訊表errorlog) - [2. 建立儲存異常資訊的儲存過程](#2-建立儲存異常資訊的儲存過程) - [3. 建立在SQL Server中列印異常資訊的儲存過程](#3-建立在

C#高級編程八十一天----捕獲異常

意思 esp rgs track com nbsp 原因 修飾 tracking 捕獲異常 前面主要說了關於異常的一些基礎和理論知識,沒有進入到正真的異常案例,這一講通過幾個案例來描寫敘述一下異常的捕獲和處理. 案例代碼: using System; usi

自己定義Application的未捕獲異常處理

ger 捕捉異常 ets 工作 而在 toa new t contex als 近期由於工作原因。進行Android應用開發時發現應用在出現類似空指針等異常時,拋出未被捕獲的異常。Android系統有默認的未捕獲異常處理器,默認行為是結束對應的

PHP 使用try catch,捕獲異常

get type 設置 html 異常信息 utf-8 tex http mes <?php header(‘Content-type:text/html;charset=utf-8‘); $a = 1; $b = 2; try {

node 進階 | 通過node中如何捕獲異常闡述express的特點

嵌套回調 執行 nod encode request quest alt mon jade node如何捕獲異常     node基於js的單線程,有了非阻塞異步回調的概念,但是在處理多個並發連接時,並發環境要求高,最重要的是單線程,單核CPU,一個進程crash則web

try catch 小結 , node的回調callback裏不能捕獲異常 , 不能被v8優化(現在能了),

容易 sin ejs called ack tro 崩潰 span 檢查 《深入淺出Nodejs》時,在第四章 - 異步編程中作者樸靈曾提到,異步編程的難點之一是異常處理,書中描述"嘗試對異步方法進行try/catch操作只能捕獲當次事件循環內的異常,對call back執

Spring事務異常回滾,捕獲異常不拋出就不會回滾

actions .info time tpi detail ava ogg ren tool 最近遇到了事務不回滾的情況,我還考慮說JPA的事務有bug? 我想多了....... 為了打印清楚日誌,很多方法我都加tyr catch,在catch中打印日誌。但是這邊情

Selenium2+python自動化57-捕獲異常(NoSuchElementException)【轉載】

owin syn doesn inf message nts 目錄 ebe 錯誤 前言 在定位元素的時候,經常會遇到各種異常,為什麽會發生這些異常,遇到異常又該如何處理呢? 本篇通過學習selenium的exceptions模塊,了解異常發生的原因。 一、發生異常 1.打開

js 捕獲異常和拋出異常

程序員 問題 線程 nod 差異 異常 由於 事情 cep try 語句測試代碼塊的錯誤。 catch 語句處理錯誤。 throw 語句創建自定義錯誤。 錯誤一定會發生 當 JavaScript 引擎執行 JavaScript 代碼時,會發生各種錯誤: 可能是語法錯誤,

SQL SERVER存儲過程中使用事務與捕獲異常

log class url 開始 過程 eat rollback catch ack https://www.douban.com/note/559596669/ 格式類似於CREATE PROCEDURE YourProcedure ASBEGIN SET N