日期:2014-05-16 浏览次数:20841 次
?
自jQuery1.5以后,AJAX模块提供了三个新的方法用于管理、扩展AJAX请求,分别是:
l? 前置过滤器 jQuery. ajaxPrefilter
l? 请求分发器 jQuery. ajaxTransport,
l? 类型转换器 ajaxConvert
这里先分析前置过滤器和请求分发器,类型转换器下一节再讲。
前置过滤器和请求分发器在执行时,分别遍历内部变量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的引用,将前置过滤器添加到
|