//事件觸發順序ajaxStart,ajaxSend,ajaxSuccess或ajaxError,ajaxComplete,ajaxStop $(document).ajaxStart(function (event) { /* * 每個ajax即將發送的時候觸發該事件,只有一個事件對象參數 */ console.log('ajaxStart'); }) $(document).ajaxSend(function (event,xhr,opts,err) { /* * 每個ajax即將發送的時候觸發該事件 * 此方法接受四個參數,分別是事件對象,XHR對象,和發起ajax請求的配置對象,錯誤信息 */ if(opts.type == 'get'){ xhr.abort(); } }) $(document).ajaxSuccess(function (event,xhr,opts) { /* * 此方法接受三個參數,分別是事件對象,XHR對象,和發起ajax請求的配置對象 * 每個ajax請求成功都會觸發該事件 * 配置對象中的success回調會先執行,而後再執行這個事件 */ console.log(JSON.parse(xhr.responseText)) }) $(document).ajaxError(function (event,xhr,opts,err) { /* * 此方法接受四個參數,分別是事件對象,XHR對象,和發起ajax請求的配置對象,錯誤信息 * 每個ajax請求失敗都會觸發該事件 * 配置對象中的error回調會先執行,而後再執行這個事件 * 若是是客戶端錯誤致使請求失敗,err的值有多是timeout,error,abort,或者是拋出錯誤異常對象 */ console.log(err) }) $(document).ajaxComplete(function (event,xhr,opts) { /* * 此方法接受三個參數,分別是事件對象,XHR對象,和發起ajax請求的配置對象 * 每個ajax請求完成都會觸發該事件,無論請求的結果如何 * 配置對象中的complete回調會先執行,而後再執行這個事件 */ }) $(document).ajaxStop(function (event) { /* * 此方法只接受一個事件對象參數,此事件只觸發一次 * 當全部ajax請求完成的時候調用一次,無論ajax請求的狀態是失敗仍是成功或是被取消 */ })
注意:ajaxStart和ajaxSend事件必須放在ajax請求代碼以前,否則不會觸發
jquery ajax中success與complete的執行順序
http://blog.sina.com.cn/s/blog_4adc4b090101dhnh.html
https://q.cnblogs.com/q/21810/
******************************************************************
- ajaxStart:ajax請求開始前
- ajaxSend:ajax請求時
- ajaxSuccess:ajax獲取數據後
- ajaxComplete:ajax請求完成時
- ajaxError:ajax請求發生錯誤後
- ajaxStop:ajax請求中止後
jquery中各個事件執行順序以下:
1.ajaxStart(全局事件)
2.beforeSend
3.ajaxSend(全局事件)
附加的 ajaxEnd()事件
4.success
5.ajaxSuccess(全局事件)
6.error
7.ajaxError (全局事件)
8.complete
9.ajaxComplete(全局事件)
10.ajaxStop(全局事件)
先執行success,再執行error,最後始終執行complete----------------------
區別的就是 ---
success:當請求成功時調用函數,即status==200;
complete:當請求完成時調用函數,即status==40四、40三、302...只要不出錯就行。
由於一般咱們須要用來清理資源 因此就設計成compelete在success以後執行
jquery中的ajax方法參數老是記不住,這裏記錄一下。
1.url:
要求爲String類型的參數,(默認爲當前頁地址)發送請求的地址。
2.type:
要求爲String類型的參數,請求方式(post或get)默認爲get。注意其餘http請求方法,例如put和delete也可使用,但僅部分瀏覽器支持。
3.timeout:
要求爲Number類型的參數,設置請求超時時間(毫秒)。此設置將覆蓋$.ajaxSetup()方法的全局設置。
4.async:
要求爲Boolean類型的參數,默認設置爲true,全部請求均爲異步請求。若是須要發送同步請求,請將此選項設置爲false。注意,同步請求將鎖住瀏覽器,用戶其餘操做必須等待請求完成才能夠執行。(一般都是異步的請求,須要在請求完成後執行的操做通常放在回調函數裏邊)
5.cache:
要求爲Boolean類型的參數,默認爲true(當dataType爲script時,默認爲false),設置爲false將不會從瀏覽器緩存中加載請求信息。
6.data:
要求爲Object或String類型的參數,發送到服務器的數據。若是已經不是字符串,將自動轉換爲字符串格式。get請求中將附加在url後。防止這種自動轉換,能夠查看 processData選項。對象必須爲key/value格式,例如{foo1:"bar1",foo2:"bar2"}轉換爲&foo1=bar1&foo2=bar2。若是是數組,JQuery將自動爲不一樣值對應同一個名稱。例如{foo:["bar1","bar2"]}轉換爲&foo=bar1&foo=bar2。
7.dataType:
要求爲String類型的參數,預期服務器返回的數據類型。若是不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,並做爲回調函數參數傳遞。可用的類型以下:
xml:返回XML文檔,可用JQuery處理。
html:返回純文本HTML信息;包含的script標籤會在插入DOM時執行。
script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),全部post請求都將轉爲get請求。
json:返回JSON數據。
jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換後一個「?」爲正確的函數名,以執行回調函數。
text:返回純文本字符串。
8.beforeSend:
要求爲Function類型的參數,發送請求前能夠修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中若是返回false能夠取消本次ajax請求。XMLHttpRequest對象是唯一的參數。
function(XMLHttpRequest){
this; //調用本次ajax請求時傳遞的options參數
}
9.complete:
要求爲Function類型的參數,請求完成後調用的回調函數(請求成功或失敗時均調用)。參數:XMLHttpRequest對象和一個描述成功請求類型的字符串。
function(XMLHttpRequest, textStatus){
this; //調用本次ajax請求時傳遞的options參數
}
10.success:要求爲Function類型的參數,請求成功後調用的回調函數,有兩個參數。
(1)由服務器返回,並根據dataType參數進行處理後的數據。
(2)描述狀態的字符串。
function(data, textStatus){
//data多是xmlDoc、jsonObj、html、text等等
this; //調用本次ajax請求時傳遞的options參數
}
11.error:
要求爲Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)。ajax事件函數以下:
function(XMLHttpRequest, textStatus, errorThrown){
//一般狀況下textStatus和errorThrown只有其中一個包含信息
this; //調用本次ajax請求時傳遞的options參數
}
12.contentType:
要求爲String類型的參數,當發送信息至服務器時,內容編碼類型默認爲"application/x-www-form-urlencoded"。該默認值適合大多數應用場合。
13.dataFilter:
要求爲Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。
function(data, type){
//返回處理後的數據
return data;
}
14.dataFilter:
要求爲Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。
function(data, type){
//返回處理後的數據
return data;
}
15.global:
要求爲Boolean類型的參數,默認爲true。表示是否觸發全局ajax事件。設置爲false將不會觸發全局ajax事件,ajaxStart或ajaxStop可用於控制各類ajax事件。
16.ifModified:
要求爲Boolean類型的參數,默認爲false。僅在服務器數據改變時獲取新數據。服務器數據改變判斷的依據是Last-Modified頭信息。默認值是false,即忽略頭信息。
17.jsonp:
要求爲String類型的參數,在一個jsonp請求中重寫回調函數的名字。該值用來替代在"callback=?"這種GET或POST請求中URL參數裏的"callback"部分,例如{jsonp:'onJsonPLoad'}會致使將"onJsonPLoad=?"傳給服務器。
18.username:
要求爲String類型的參數,用於響應HTTP訪問認證請求的用戶名。
19.password:
要求爲String類型的參數,用於響應HTTP訪問認證請求的密碼。
20.processData:
要求爲Boolean類型的參數,默認爲true。默認狀況下,發送的數據將被轉換爲對象(從技術角度來說並不是字符串)以配合默認內容類型"application/x-www-form-urlencoded"。若是要發送DOM樹信息或者其餘不但願轉換的信息,請設置爲false。
21.scriptCharset:
要求爲String類型的參數,只有當請求時dataType爲"jsonp"或者"script",而且type是GET時纔會用於強制修改字符集(charset)。一般在本地和遠程的內容編碼不一樣時使用。
案例代碼:
$(function(){ $('#send').click(function(){ $.ajax({ type: "GET", url: "test.json", data: {username:$("#username").val(), content:$("#content").val()}, dataType: "json", success: function(data){ $('#resText').empty(); //清空resText裏面的全部內容 var html = ''; $.each(data, function(commentIndex, comment){ html += '<div class="comment"><h6>' + comment['username'] + ':</h6><p class="para"' + comment['content'] + '</p></div>'; }); $('#resText').html(html); } }); }); });
22.順便說一下$.each()函數:
$.each()函數不一樣於JQuery對象的each()方法,它是一個全局函數,不操做JQuery對象,而是以一個數組或者對象做爲第1個參數,以一個回調函數做爲第2個參數。回調函數擁有兩個參數:第1個爲對象的成員或數組的索引,第2個爲對應變量或內容。
jQuery.ajaxSetup() 函數詳解
能夠參考這篇:http://www.365mini.com/page/jquery_ajaxsetup.htm
連接2:http://blog.csdn.net/david_520042/article/details/51952377
不過要注意:若是用戶在本身的ajax定義了和全局ajaxSetup同樣的屬性,則用戶定義的屬性會覆蓋全局默認的屬性。如用戶本身定義了屬性error,ajaxSetup也定義了error,出現error時,會走用戶自定義的error,不會走ajaxSetup的error。
若是你想寫一遍ajaxSetup,讓其餘頁面都支持這個功能,能夠這樣作:
寫一個js,讓替他頁面引入這個js就好了。如寫ajaxSetup.js,ajaxSetup.js裏內容
- $(function(){
- $.ajaxSetup( {
- url: "/index.html" , // 默認URL
- aysnc: false , // 默認同步加載
- type: "POST" , // 默認使用POST方式
- headers: { // 默認添加請求頭
- "Author": "CodePlayer" ,
- "Powered-By": "CodePlayer"
- } ,
- error: function(jqXHR, textStatus, errorMsg){ // 出錯時默認的處理函數
- // jqXHR 是通過jQuery封裝的XMLHttpRequest對象
- // textStatus 可能爲: null、"timeout"、"error"、"abort"或"parsererror"
- // errorMsg 可能爲: "Not Found"、"Internal Server Error"等
- // 提示形如:發送AJAX請求到"/index.html"時出錯[404]:Not Found
- if (jqXHR.status==500) {
- alert( '出錯[' + jqXHR.status + ']:' + errorMsg+':::'+jqXHR.responseText );
- }
- if (jqXHR.status==404) {
- alert( '出錯[' + jqXHR.status + ']:' + errorMsg+':::'+jqXHR.responseText );
- }
- }
- } );
- });
jQuery.ajaxSetup()
函數用於設置AJAX的全局默認設置。
該函數用於更改jQuery中AJAX請求的默認設置選項。以後執行的全部AJAX請求,若是對應的選項參數沒有設置,將使用更改後的默認設置。
該函數屬於全局jQuery
對象。
語法
jQuery 1.1 新增該靜態函數。
- jQuery.ajaxSetup( settings )
參數
參數 | 描述 |
---|---|
settings | Object類型一個對象,其中的每一個屬性表示須要更改默認設置的選項,屬性值表示更改後的默認值。 |
關於settings
參數能夠識別的屬性,請參考jQuery.ajax()
中的settings參數說明。其中的全部選項參數都是可選設置的。
返回值
jQuery.ajaxSetup()
函數沒有返回值,或者說其返回值爲undefined
。
示例&說明
如下是與jQuery.ajaxSetup()
函數相關的jQuery示例代碼,以演示jQuery.ajaxSetup()
函數的具體用法:
- //設置AJAX的全局默認選項
- $.ajaxSetup( {
- url: "/index.html" , // 默認URL
- aysnc: false , // 默認同步加載
- type: "POST" , // 默認使用POST方式
- headers: { // 默認添加請求頭
- "Author": "CodePlayer" ,
- "Powered-By": "CodePlayer"
- } ,
- error: function(jqXHR, textStatus, errorMsg){ // 出錯時默認的處理函數
- // jqXHR 是通過jQuery封裝的XMLHttpRequest對象
- // textStatus 可能爲: null、"timeout"、"error"、"abort"或"parsererror"
- // errorMsg 可能爲: "Not Found"、"Internal Server Error"等
- // 提示形如:發送AJAX請求到"/index.html"時出錯[404]:Not Found
- alert( '發送AJAX請求到"' + this.url + '"時出錯[' + jqXHR.status + ']:' + errorMsg );
- }
- } );
- // 未設置任何參數,但url、async、type、headers、error等參數的默認值均已被$.ajaxSetup()更改(如上)
- $.ajax( );
- // 設置了url、type、success、error,就使用本身設置的參數值
- // 但async、headers等參數的默認值已被$.ajaxSetup()更改
- $.ajax( {
- url: "myurl.php?action=list" ,
- type: "GET" ,
- success: function( data, textStatus, jqXHR ){
- alert("返回數據:" + data);
- } ,
- error: function(jqXHR, textStatus, errorMsg){
- alert("本身的error!");
- }
- });
- // 上述$.ajaxSetup()的默認設置對$.get()、$.post()、load()、$.getJSON()、$.getScript()等AJAX函數也生效
- // 由於這些函數也是在內部調用$.ajax()函數來實現的,只不過它們在內部都設置了一些參數
- // $.get()在內部調用$.ajax()時已設置type爲"GET",所以仍然使用GET方式。
- // 但url、async、headers、error等參數的默認值已被$.ajaxSetup()更改
- $.get( );
- // $.post()在內部調用$.ajax()時已設置type爲"POST",所以仍然使用POST方式。
- // url也被設置爲"user/action.php?method=addUser"
- // 但async、headers、error等參數的默認值已被$.ajaxSetup()更改
- $.post( "user/action.php?method=addUser" );