JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
////////////////////////////////////////////////////////////////// //options是请求的选项// //originalOptions值作为提供给Ajax方法未经修改的选项,因此,没有ajaxSettings设置中的默认值// //jqXHR是请求的jqXHR对象// ////////////////////////////////////////////////////////////////// $.ajaxPrefilter("image",function(options,originalOptions,jqXHR){ //通过预处理器转化类型 if(options.test){ options.type='GET' } //增加前缀 options.url="http://img.mukewang.com/"+options.url }); /////////////////////// //请求分发器transports// /////////////////////// $.ajaxTransport("image",function(s){ if(s.type==="GET"&&s.async){ varimage; return{ send:function(_,callback){ image=newImage(); functiondone(status){ if(image){ varstatusText=(status==200)?"success":"error", tmp=image; image=image.onreadystatechange=image.onerror=image.onload=null; callback(status,statusText,{ image:tmp }); } } image.onreadystatechange=image.onload=function(){ done(200); }; image.onerror=function(){ done(404); }; show(s.url) image.src=s.url; }, abort:function(){ if(image){ image=image.onreadystatechange=image.onerror=image.onload=null; } } }; } }); $("#test").click(function(){ //执行一个异步的HTTP(Ajax)的请求。 varajax=$.ajax({ test:true,//测试 url:'547d5a45000156f406000338-590-330.jpg', dataType:'image', type:'POST', data:{ foo:["bar1","bar2"] }, //这个对象用于设置Ajax相关回调函数的上下文 context:document.body, //请求发送前的回调函数,用来修改请求发送前jqXHR beforeSend:function(xhr){ xhr.overrideMimeType("text/plain;charset=x-user-defined"); show('局部事件beforeSend') }, //请求完成后回调函数(请求success和error之后均调用) complete:function(){ show('局部事件complete') }, error:function(){ show('局部事件error请求失败时调用此函数') }, success:function(){ show('局部事件success') } }) ajax.done(function(){ show('done') }).fail(function(){ show('fail') }).always(function(){ show('always') })