jquery的ajax全局事件,jQuery扫盲之全局Ajax事件

jQuery扫盲之全局Ajax事件

写于2013年09月10日 关于JavaScript,jQuery

当今天没啥东西写的时候,会强迫自己看看一些常用的,但是又不完全了解的东西,例如各种文档、各种API参考等。扫盲系列其实就是去读这些API的文档,去发掘一些我们不知道的用法和要注意的事情。

今天讨论的是jQuery中有关Ajax的全局事件,这些事件有时候可以使我们的代码更加简洁,表现更加一致。

当jQuery.ajaxSetup()返回的global属性是true的时候(这个也是默认值),全局的Ajax事件才能生效。还有,调用jQuery.ajax的时候如果选项中的global为false,这次请求也不会触发全局的Ajax事件。注意,跨域的Ajax或者是jsonp是无论如何都不会触发这些全局的Ajax事件的。

强烈建议在document上绑定这些事件(在jQuery 1.8往后的版本只能绑定在document上了)。这些全局Ajax事件的绑定方法都只接受一个参数,就是要绑定的事件处理程序。

ajaxComplete

处理程序接受三个参数,事件对象、XMLHttpRequest对象、调用这次Ajax的ajaxOptions。每一个Ajax请求完成(无论成功或者失败)时,都会调用所有事件处理程序。

ajaxError

处理程序接受四个参数,事件对象、jQuery封装的XHR对象、调用这次Ajax的ajaxOptions、还有抛出的错误,例如服务器错误(5xx)、路径错误(4xx)或者是当数据类型是json或者其他特定类型时解析错误(json语法错误)等。错误以字符串的形式返回,例如Not found、Internal Server Error等。每一次Ajax请求以失败告终的时候,都会调用所有事件处理程序。

ajaxSend

处理程序接受三个参数,与ajaxError的前三个参数一致。每一次发出一个Ajax请求时,都会嗲用所有事件处理程序。

ajaxStart

处理程序不接受任何参数。当一个Ajax请求发出之前,jQuery会检测是否正在有其他Ajax请求已经发出。如果没有,则认为这个请求是当前第一个发出的Ajax请求,ajaxStart会被触发。触发时会调用所有事件处理程序。

ajaxStop

处理程序不接受任何参数。当一个Ajax请求完成之后,jQuery会检测是否还有其他Ajax请求还没完成。如果没有,则认为这个请求是当前完成的最后一个Ajax请求,ajaxStop会被触发。触发时会调用所有事件处理程序。

ajaxSuccess

处理程序接受三个参数,与ajaxComplete一致。当请求正确返回(2xx或者304)时,会调用所有事件处理程序。

执行顺序

经过上面的解释,其实已经可以得出这几个事件的执行顺序了。先是ajaxStart,然后是ajaxSend,请求返回后根据返回正确与否触发ajaxSuccess或者是ajaxError,然后是ajaxComplete,最后是ajaxStop。我写了一个例子,可以参考这里。

例子的执行跟文档有一点出入,就是事件处理程序的接受的参数不同(jQuery是2.x的最高版本):

ajaxStart和ajaxStop的事件处理程序接受一个参数,就是jQuery封装的事件对象。

ajaxSuccess和ajaxComplete的事件处理程序接受的第二个参数也是jQuery封装过的jqXHR对象,而不是原生的XMLHttpRequest对象。

ajaxSuccess的事件处理程序还接受第四个对象,就是返回的数据转化后的对象,例如json、xml等有格式的数据。

根据官网上的文档去使用这些API不会有太大的问题,不过不知道在哪里可以看到jQuery最新版本的文档呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值