详解jQuery官方的完整的Ajax事件

Posted 我是老冯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解jQuery官方的完整的Ajax事件相关的知识,希望对你有一定的参考价值。


列举jQuery官方的完整的Ajax事件列表:


1、ajaxStart (Global Event) ---- This event is broadcast if an Ajax request is started and no other Ajax requests are currently running.  


***当开始一个AJAX请求的时候,此时没有其他活跃的AJAX请求,该请求就会触发ajaxStart事件。***

***从jQuery 1.8开始,ajaxStart事件的处理函数必须绑定到document对象上才能生效。***


$doc = $(document);
$doc.ajaxStart(function(){
   alert(1)
})
$("#btn").click(function(){
 // 该AJAX请求开始时,此时没有其他活跃的AJAX请求,但它不会触发
 // 因为它的global选项为false,被禁止触发任何AJAX事件,所以它不会弹出对话框

 $.ajax({
   url: "index.html",
   global: false //禁止触发全局AJAX事件
 })
 // 该AJAX请求开始时,此时没有其他活跃的AJAX请求(上一个请求虽然尚未执行完成,但它
 被禁止触发全局AJAX事件,jQuery在检查活跃请求时会忽略掉它)
 // 因此会触发ajaxStart事件,会弹出2次对话框

 $.ajax({url:"myurl.php"})  
})


2、beforeSend (Local Event) ---- This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.) 


***beforeSend方法,用于在向服务器发送请求前执行一些动作。***


$.ajax({    beforeSend: function(){     // Handle the beforeSend event    }    // ......
});


常见用法案例:(在$.ajax请求中的beforeSend方法中把提交按钮禁用掉,等到Ajax请求执行完毕,在恢复按钮的可用状态。防止因网络或者其他原因导致重复提交)


// 提交表单数据到后台处理
$.ajax({    type: "post",    data: studentInfo,    contentType: "application/json",    url: "/Home/Submit",    beforeSend: function () {        // 禁用按钮防止重复提交        $("#submit").attr({ disabled: "disabled" });    },    success: function (data) {        if (data == "Success") {            //清空输入框            clearBox();        }    },    complete: function () {        $("#submit").removeAttr("disabled");    },    error: function (data) {        console.info("error: " + data.responseText);    }
});


3、ajaxSend (Global Event) ---- This global event is also triggered before the request is run. 


***ajaxSend() 方法规定 AJAX 请求即将发送时运行的函数。(每当一个Ajax请求即将发送,jQuery就会触发ajaxSend事件,在这个时间点所有处理函数都会使用.ajaxSend()方法注册并执行。)***
***注意:自 jQuery 版本 1.8 起,该方法只被附加到文档。***


$(document).ajaxSend(function(event,xhr,options){
   //... ...
})


event - 包含 event 对象
xhr - 包含 XMLHttpRequest 对象
options - 包含 AJAX 请求中使用的选项


例:当 AJAX 请求即将发送时,改变 <div> 元素的内容


<!DOCTYPE html>  

<html>  

<head>  

    <script ></script>  

    <script>  

        $(document).ready(function(){  

              $(document).ajaxSend(function(e,xhr,opt){  

                $("div").append("<p>Requesting " + opt.url + "</p>");  

              });  

              $("button").click(function(){  

                $("div").load("demo_ajax_load.php");  

              });  

        });  

    </script>  

</head>  

<body>  

    <div>

        <h2>使用 AJAX 修改文本</h2>

     </div>  

    <button>修改内容</button>  

</body>  

</html>


当我们点击button元素并且Ajax请求即将开始,这个<div> 元素的内容就会改变


***在jQuery1.9中,jQuery全局AJAX事件的所有处理程序, 包括哪些.ajaxSend()添加的方法,必须 附加到 document上。***

***如果 $.ajax() 或 $.ajaxSetup()调用时, global 选项设置为 false, 那么.ajaxSend()将不会被触发。***


4、success (Local Event) ---- This event is only called if the request was successful (no errors from the server, no errors with the data). 


例:

$.ajax({

    async : false,

    cache : false,

    type : 'POST',

    url : 'area/prepareCreate',

    error : function() {

        alert('smx失败 ');

    },

    success : function(data) {

        $("#content-wrapper").html(data);

    }

});


***success(本地事件)----只有在请求成功时才会调用此事件(服务器没有错误,没有数据错误)。***


5、ajaxSuccess (Global Event) ---- This event is also only called if the request was successful. 


语法:

 .ajaxSuccess(function(event,xhr,options))

event - 包含 event 对象

xhr - 包含 XMLHttpRequest 对象

options - 包含 AJAX 请求中使用的选项


$("#msg").ajaxSuccess(function(evt, request, settings){

  $(this).append("<p>请求成功!</p>");

});


***ajaxSuccess() 方法在 AJAX 请求成功时执行函数。***

***ajaxSuccess(全局事件)----只有在请求成功时才会调用此事件。***

***无论 Ajax 请求在何时成功完成 ,jQuery 都会触发该 ajaxSuccess 事件。在此时,由 .ajaxSuccess() 方法注册的任何函数都会被执行。***


6、error (Local Event) ---- This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request). 


例:

$.ajax({

    async : false,

    cache : false,

    type : 'POST',

    url : 'area/prepareCreate',

    error : function() {

        alert('smx失败 ');

    },

    success : function(data) {

        $("#content-wrapper").html(data);

    }

});


***error(本地事件)----只有当请求发生错误时才会调用此事件(对于请求,您永远不会同时发生错误和成功回调)。***


7、ajaxError (Global Event) ---- This global event behaves the same as the local error event. 


语法:

.ajaxError(function(event,xhr,options,exc))

event - 包含 event 对象

xhr - 包含 XMLHttpRequest 对象

options - 包含 AJAX 请求中使用的选项

exc - 包含 javascript exception


$("div").ajaxError(function(){

  alert("An error occurred!");

});


***ajaxError() 方法在 AJAX 请求发生错误时执行函数。***

***ajaxError(全局事件)----这个全局事件的行为与本地error事件相同。***


8、complete (Local Event) ---- This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests. 


例:

$.ajax({

    async : false,

    cache : false,

    type : 'POST',

    url : 'area/prepareCreate',

    error : function() {

        alert('smx失败 ');

    },

    success : function(data) {

        $("#content-wrapper").html(data);

    },

    complete: function (XMLHttpRequest, textStatus) {  

        console.log(XMLHttpRequest);  

    }

});


***complete(本地事件)----无论请求是否成功,都会调用此事件。 即使对于同步请求,您也将始终收到完整的回调。***


9、ajaxComplete (Global Event) ---- This event behaves the same as the complete event and will be triggered every time an Ajax request finishes. 


语法: 

.ajaxComplete(function(event,xhr,options))

event - 包含 event 对象

xhr - 包含 XMLHttpRequest 对象

options - 包含 AJAX 请求中使用的选项


$("#txt").ajaxComplete(function(){

  $("#wait").css("display","none");

});


***ajaxComplete() 方法在 AJAX 请求完成时执行函数。***

***与 ajaxSuccess() 不同,通过 ajaxComplete() 方法规定的函数会在请求完成时运行,即使请求并未成功。***

***ajaxComplete(全局事件)----这个事件的行为与complete事件相同,每当Ajax请求结束时就会触发。***


10、ajaxStop (Global Event) ---- This global event is triggered if there are no more Ajax requests being processed. 


$("div").ajaxStop(function(){

  alert("所有 AJAX 请求已完成");

});


***无论 Ajax 请求在何时完成 ,jQuery 都会检查是否存在其他 Ajax 请求。如果不存在,则 jQuery 会触发该 ajaxStop 事件。在此时,由 .ajaxStop() 方法注册的任何函数都会被执行。***



总结:


***触发ajax请求后,各个事件执行顺序就是1~10的顺序

***先执行success,再执行error,最后始终执行complete

***success:即status==200;

***complete:即status==404、403、302...只要不出错就行。

***因为通常我们需要用来清理资源   所以就设计成compelete在success之后执行

以上是关于详解jQuery官方的完整的Ajax事件的主要内容,如果未能解决你的问题,请参考以下文章

通过ajax调用的Jquery完整日历事件

jquery的ajax全局事件详解

jQuery.ajaxComplete() 函数详解

jQuery.load()事件使用方法详解

论如何把JS踩在脚下 —— JQuery基础及Ajax请求详解

jQuery学习之jQuery Ajax用法详解