AJAX中前置过滤器与请求分发器.docxVIP

  • 3
  • 0
  • 约1.87万字
  • 约 14页
  • 2018-07-02 发布于上海
  • 举报
15.4????????AJAX中的前置过滤器和请求分发器自jQuery1.5以后,AJAX模块提供了三个新的方法用于管理、扩展AJAX请求,分别是:???前置过滤器?jQuery. ajaxPrefilter???请求分发器?jQuery. ajaxTransport,???类型转换器?ajaxConvert这里先分析前置过滤器和请求分发器,类型转换器下一节再讲。15.4.1??前置过滤器和请求分发器的初始化前置过滤器和请求分发器在执行时,分别遍历内部变量prefilters和transports,这两个变量在jQuery加载完毕后立即初始化,初始化的过程很有意思。首先,prefilters和transports被置为空对象:prefilters = {},?//?过滤器transports = {},?//?分发器然后,创建jQuery.ajaxPrefilter和jQuery.ajaxTransport,这两个方法都调用了内部函数addToPrefiltersOrTransports,addToPrefiltersOrTransports返回一个匿名闭包函数,这个匿名闭包函数负责将单一前置过滤和单一请求分发器分别放入prefilters和transports。我们知道闭包会保持对它所在环境变量的引用,而jQuery.ajaxPrefilter和jQuery.ajaxTransport的实现又完全一样,都是对Map结构的对象进行赋值操作,因此这里利用闭包的特性巧妙的将两个方法的实现合二为一。函数addToPrefiltersOrTransports可视为模板模式的一种实现。ajaxPrefilter:?addToPrefiltersOrTransports( prefilters ),?//?通过闭包保持对prefilters的引用,将前置过滤器添加到prefiltersajaxTransport: addToPrefiltersOrTransports( transports ),?//?通过闭包保持对transports的引用,将请求分发器添加到transports?//?添加全局前置过滤器或请求分发器,过滤器的在发送之前调用,分发器用来区分ajax请求和script标签请求function?addToPrefiltersOrTransports( structure ) {????//?通过闭包访问structure????//?之所以能同时支持Prefilters和Transports,关键在于structure引用的时哪个对象????// dataTypeExpression is optional and defaults to *????// dataTypeExpression是可选参数,默认为*????return?function( dataTypeExpression, func ) {???????//?修正参数???????if?(?typeof?dataTypeExpression !==?string?) {???????????func = dataTypeExpression;???????????dataTypeExpression =?*;???????}????????if?( jQuery.isFunction( func ) ) {???????????var?dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),?//?用空格分割数据类型表达式dataTypeExpression??????????????i = 0,??????????????length = dataTypes.length,??????????????dataType,??????????????list,??????????????placeBefore;????????????// For each dataType in the dataTypeExpression???????????for(; i length; i++ ) {??????????????dataType = dataTypes[ i ];??????????????// We control if were asked to add before??????????????// any existing element??????????????//?如果以+开头,过滤+??????????????placeBefore =?/^\+/.test( dataType );??????????????if?( placeBefore ) {?????

文档评论(0)

1亿VIP精品文档

相关文档