日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ajax怎么会突然出现401,当jquery ajax遇上401请求

發布時間:2023/12/16 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ajax怎么会突然出现401,当jquery ajax遇上401请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jquery ajax是個很常用接口,而在請求時候,可能存在響應401的情況(身份認證過期或未登錄),比較容易出現在混合應用上,如何進行身份認證,重發失敗請求,還是值得注意的。

ajax請求有兩種方式

1. 回調

最常寫的方式,成功失敗處理以回調方式傳入。

$.ajax({

ajax參數...

success : xxxxxx

error: xxxxxx

});

2. Deferred方式

Deferred模式我在《js異步編程》有說明, ajax調用本身返回就是一個Deferred對象,成功失敗回調不以參數傳入。

$.ajax({

ajax參數...

}).then(function(res){

//成功處理片段

},function(err){

//失敗處理片段

});

既然有這兩種方式,那應對處理401的方式也是有兩種。

401處理的兩種方式

1. 回調

這種方式的處理比較簡單,在失敗回調里面判斷401,如果是則進行身份認證,成功重發請求。

function getXXXX(type, url, data, success, error){

$.ajax({

ajax參數...

success : xxxxxx

error : function(xhr,textStatus,errorThrown){

if (xhr.status == 401) {

刷新身份認證方法(function(){

getXXXX(type, url, data, success, error);

});

} else{

// 調用外部的error

error && error(xhr,textStatus,errorThrown);

}

}

});

}

2.?Deferred方式

這種方式目前我找到的處理方式需要修改jquery源碼。

//全局設置一個方法

$.ajaxSetup({

authError : function(callback){

刷新身份認證方法( function(){

callback && callback();

});

}

});

//jquery2.1.4版本源碼,大概是8261行

// Success/Error

if ( isSuccess ) {

deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );

} else {

if(( jqXHR.status == 401 || jqXHR .status == 403) && callbackContext.authError){

callbackContext.authError(function (){

state = 0;

jqXHR.setRequestHeader( "Authorization", XXXXXX);

jqXHR.readyState = 1;

try {

state = 1;

transport.send( requestHeaders, done );

} catch ( e ) {

// Propagate exception as error if not done

if ( state < 2 ) {

done( -1, e );

// Simply rethrow otherwise

} else {

throw e;

}

}

});

return;

} else {

deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );

}

}

這里說下為什么不能像第一種方式那樣進行請求。

有兩個原因:

1. then這種鏈式寫法,導致這請求的回調不是在參數里,而是在jQuery.Callbacks一個optionsCache全局變量里,我們無法在ajax error里拿到回調函數進行重發。

2. 寫在then里的回調觸發一次就會被銷毀,當觸發了error時,回調執行后就銷毀。

最后的處理方式就是在要觸發error之前,攔截401的錯誤,重新進行身份認證,然后重置狀態,重發請求。

本文為原創文章,轉載請保留原出處,方便溯源,如有錯誤地方,謝謝指正。

jQuery&period;ajax&lpar; options &rpar; &colon; 通過 HTTP 請求加載遠程數據

jQuery.ajax( options ) : 通過 HTTP 請求加載遠程數據 這個是jQuery 的底層 AJAX 實現.簡單易用的高層實現見 $.get, $.post 等. $.ajax() ...

用JQuery Ajax 與一般處理程序 請求數據無刷新,以及如何調試錯誤

通過 ajax() 與 一般處理程序,請求數據庫數據,實現界面無刷新. Jquery ajax 請求參數詳細說明?http://www.w3school.com.cn/jquery/ajax_ajax ...

簡單的jquery ajax文件上傳功能

/* * 圖片上傳 * 注意如果不加processData:false和contentType:false會報錯 */ function uploadImage(image) { var imageF ...

兼容ie的jquery ajax文件上傳

Ajax文件上傳插件很多,但兼容性各不一樣,許多是對ie不兼容的,另外項目中是要求將網頁內容嵌入到桌面端應用的,這樣就不允許帶flash的上傳插件了,如:jquery uploadify...悲劇 對 ...

ASP&period;NET 異步Web API &plus; jQuery Ajax 文件上傳代碼小析

該示例中實際上應用了 jquery ajax(web client) + async web api 雙異步. jquery ajax post $.ajax({ type: "POST&q ...

struts2&plus;jquery&plus;ajax實現上傳&amp&semi;&amp&semi;校驗實例

一直以為ajax不能做上傳,直到最近看了一些文章.需要引入AjaxFileUploaderV2.1.zip,下載鏈接:http://pan.baidu.com/s/1i3L7I2T 代碼和相關配置如下 ...

jQuery ajax中的get請求方法匯總

$.get() Defination and Usage 從服務端以HTTP GET方式獲取數據 Examples 請求test.php,但是忽略返回的數據 $.get("test.php& ...

Struts2 使用Jquery&plus;ajax 文件上傳

話不多說 直接上代碼 前臺js: var formData = new FormData(); formData.append("file1",$("#file1&quo ...

jQuery選擇器遇上一些特殊字符

學習jQuery過程中,發現一些特殊字符,如“.”,“#”,"(","]"等.它在選擇器應用時,按照普通處理就會出錯.解決辦法,就是使用轉義字符來處理,這有點象 ...

隨機推薦

u-boot 流程分析

u-boot 介紹: 對于計算機來說 , 從一開始上機通電是無法直接啟動操作系統的 , 這中間需要一個引導過程 , 嵌入式Linux系統同樣離不開引導程序 ,? 這個啟動程序就叫啟動加載程序(Boot ...

c&num; 獲取 webbrowser 完整 cookie

下面的代碼實現的功能確實如標題所言,但要求是獲取的是當前進程內的webbrowser,跨進程或引用的ShellWindows對象無效, 哎我本來兩種情況都要用,只把前者代碼先記下: internal ...

POJ C程序設計進階 編程題#1:尋找下標

編程題#1:尋找下標 來源: POJ?(Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績.) 注意: 總時間限制: 1000ms 內存限制: 65536kB 描述 已知一 ...

蘋果開發——App內購以及驗證store的收據(二)

原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137605156966?suggestedreading 三. 客戶端使用Store ...

Struts2文件下載淺析

Struts2極大的簡化了文件上傳和下載,本文將主要介紹一下Struts2文件下載的實現1.功能主要是,在下載頁面點擊下載后,則下載相應的文件 2.代碼部分jsp頁面downloadPage:< ...

Jar包轉成Dll的方式&lpar;帶嵌套的jar也能做&rpar; (轉)

研究很好幾天,終于成功了.因為寫了一個Java的項目,現在要求要改寫成C#版本的.但是其中用到了svnkit,svnkit是java平臺的.改寫成C#的話,要使用SharpSVN,但是SharpSVN ...

mysql 打開sql日志,記錄所有sql

我使用的mysql版本為:5.7.11 win7環境 記錄下下載地址,省得每次百度搜了:http://dev.mysql.com/downloads/installer/ mysql 默認沒有開啟sq ...

MySQL 快速復數據庫的方法

為了方便快速復制一個數據庫,可以用以下命令將db1數據庫的數據以及表結構復制到newdb數據庫 創建新的數據庫 #mysql -u root -p123456 mysql>CREATE DATA ...

什么是XML RPC?

# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:遠程過程調用 #使用http協議做傳輸協議的rpc機制,使用xml文本的方 ...

總結

以上是生活随笔為你收集整理的ajax怎么会突然出现401,当jquery ajax遇上401请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。