jQuery1.5 以后,Ajax 模块提供了三个新的方法用于管理、扩展 Ajax 请求,分别是:
前置过滤器 jQuery. ajaxPrefilter 请求分发器 jQuery. ajaxTransport, 类型转换器 ajaxConvert
为什么会出现这几个新的概念?因为 ajax 在发送的过程还有很多一系列的处理。
具体看看代码:
jQuery.extend({ //前置过滤器 ajaxPrefilter: addToPrefiltersOrTransports(prefilters), //请求分发器 ajaxTransport: addToPrefiltersOrTransports(transports), });
其实说白了就是把对应的方法制作成函数的形式填充到 prefilters 或者 transports对应的处理包装对象中,用的时候直接执行,每个函数都保持着各自的引用,种写法的好处自然是灵活,易维护,减少代码量。
所以此时的 prefilters 中的结构可以是这样。
prefilters = { '*': function() { return { send: function() { }, callback: function() { } } } }
前置过滤器和请求分发器在执行时,分别遍历内部变量 prefilters 和 transports,这两个变量在 jQuery 加载完毕后立即初始化,从过闭包的方法填充这个 2 个对象。
<!doctype html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="../jquery-2.1.1.js"></script> <title>前置过滤器和请求分发器</title> </head> <body> <script type="text/javascript"> ///////////////////////////////// //代码一 //前置过滤器和请求分发器 //addToPrefiltersOrTransports方法 ///////////////////////////////// var prefilters = 2; var addToPrefiltersOrTransports = function(prefilters) { return function(b) { return prefilters + b; } } var ajaxPrefilter = addToPrefiltersOrTransports(prefilters) ajaxPrefilter(1) //3 ///////////////////// // 代码二 // 填充prefilters过滤器 // ///////////////////// var prefilters = {}; var addToPrefiltersOrTransports = function(structure) { return function(func) { structure['*'] = func; } } var ajaxPrefilter = addToPrefiltersOrTransports(prefilters) ajaxPrefilter(function(options) { return { send: function() { }, callback: function() { } } }) </script> </body> </html>