浅谈jQuery中Ajax事件beforesend及各参数含义


Posted in Javascript onDecember 03, 2016

Ajax会触发很多事件。

有两种事件,一种是局部事件,一种是全局事件:

局部事件:通过$.ajax来调用并且分配。

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

全局事件,可以用bind来绑定,用unbind来取消绑定。这个跟click/mousedown/keyup等事件类似。但他可以传递到每一个DOM元素上。

$("#loading").bind("ajaxSend", function(){ //使用bind
  $(this).show();
}).ajaxComplete(function(){ //直接使用ajaxComplete
  $(this).hide();
});

当然,你某一个Ajax请求不希望产生全局的事件,则可以设置global:false

$.ajax({
url: "test.html",
global: false,
// ...
});

事件的顺序如下:

ajaxStart 全局事件
开始新的Ajax请求,并且此时没有其他ajax请求正在进行。

beforeSend 局部事件
当一个Ajax请求开始时触发。如果需要,你可以在这里设置XHR对象。

ajaxSend 全局事件
请求开始前触发的全局事件

success 局部事件
请求成功时触发。即服务器没有返回错误,返回的数据也没有错误。

ajaxSuccess 全局事件
全局的请求成功

error 局部事件
仅当发生错误时触发。你无法同时执行success和error两个回调函数。

ajaxError 全局事件
全局的发生错误时触发

complete 局部事件
不管你请求成功还是失败,即便是同步请求,你都能在请求完成时触发这个事件。

ajaxComplete 全局事件
全局的请求完成时触发

ajaxStop 全局事件
当没有Ajax正在进行中的时候,触发。

局部事件回调的参数在文档中写的很清楚了,这里就不累述了。

全局事件中,除了ajaxStart和ajaxStop之外,其他的事件都有3个参数

event, XMLHttpRequest, ajaxOptions

第一个是事件,第二个是XHR对象,第三个参数最有用,是当时调用这个ajax的时候的参数。

对于ajaxError,还有第四个参数thrownError,只有当异常发生时才会被传递。

我们可以利用ajaxOptions来写一个全局的ajax事件。

比如

$("#msg").beforeSend(function(e,xhr,o) {
  $(this).html("正在请求"+o.url);
}).ajaxSuccess(function(e,xhr,o) {
  $(this).html(o.url+"请求成功");
}).ajaxError(function(e,xhr,o) {
  $(this).html(o.url+"请求失败");
});

对于这个例子,

这样我们就可以很方便的全局地在某个地方显示当前的ajax状态。

当然,之前说了,第三个参数实际上是传递给ajax的参数。get/post/load/getScript/getJSON等方法本质上都是调用ajax方法的,所以ajaxOptions.url属性总是有效的。

还有更丰富的例子。

如果你用ajax调用,还可以传递自定义参数。下面的例子我就自定义了一个msg参数给了ajax调用

//自定义参数msg
$.ajax({url:"test1.html",type:"get",msg:"页面一"});
$.ajax({url:"test2.html",type:"get",msg:"页面二"});
$.ajax({url:"test3.html",type:"get",msg:"页面三"});
$.ajax({url:"test4.html",type:"get",msg:"页面四"});
//这里就能获取到自定义参数msg。
//这可以用来区别对待不同的ajax请求。
$("#msg").beforeSend(function(e,xhr,o) {
  $(this).html("正在请求"+o.msg);
}).ajaxSuccess(function(e,xhr,o) {
  $(this).html(o.msg+"请求成功");
}).ajaxError(function(e,xhr,o) {
  $(this).html(o.msg+"请求失败");
});

最后对于load方法,还有话说。

其他的简易ajax方法,比如get,post,getJSON等,他们的回调函数都是设置了success回调。

而只有load设置的其实是complete回调。

所以,load里设置的回调函数的参数应该有2个。

XMLHttpRequest和textStatus

但实际上也并非如此。

load的回调有三个参数

XMLHttpRequest.responseText, textStatus, XMLHttpRequest

所以,你可以在load的回调里

通过textStatus==”success”或者textStatus==”error”来判断是否调用成功。

或者用XMLHttpRequest.status属性判断是200还是404或者其他的。

这点上,我认为比普通的get/post等方法更先进。如果要单数设置每get的error是不可能的。但是设置一个全局的ajaxError其实也是不错的选择

以上这篇浅谈jQuery中Ajax事件beforesend及各参数含义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
javascript比较两个日期相差天数的方法
Jul 24 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
Aug 31 Javascript
想用好React的你必须要知道的一些事情
Jul 24 Javascript
浅谈Angular 中何时取消订阅
Nov 22 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
Oct 12 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
Element Dialog对话框的使用示例
Jul 26 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
jquery 判断div show的状态实例
Dec 03 #Javascript
利用浮层使select不可选的实现方法
Dec 03 #Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 #Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 #Javascript
jquery 多个radio的click事件实例
Dec 03 #Javascript
jquery点击展示与隐藏更多内容
Dec 03 #Javascript
Javascript 实现放大镜效果实例详解
Dec 03 #Javascript
You might like
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php中cookie的使用方法
2014/03/29 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
代码分析Python地图坐标转换
2018/02/08 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
肖申克救赎观后感
2015/06/02 职场文书
企业安全生产规章制度
2015/08/06 职场文书
建房合同协议书
2016/03/21 职场文书
创业计划书之服装
2019/10/07 职场文书