小窗口登录对于jquery—ajax重写

define(function(require, exports, module) {
	var $ = require('$');
	       //是否已经弹出小窗口
	       var isToLogin=false;
		   //备份jquery的ajax方法     
		   var _ajax = $.ajax;     
		        
		   //重写jquery的ajax方法     
		   $.ajax=function(opt){     
		       //备份opt中error和success方法     
		       var fn = {     
		           error:function(XMLHttpRequest, textStatus, errorThrown){},     
		           success:function(data, textStatus){},
		           complete: function(XMLHttpRequest, textStatus,responseText){}
		        }     
		        if(opt.error){     
		            fn.error=opt.error;     
		        }     
		        if(opt.success){     
		            fn.success=opt.success;     
		        }     
		        if(opt.complete){     
		        	fn.complete=opt.complete;     
		        }     
		             
		        //扩展增强处理     
		        var _opt = $.extend(opt,{     
		        	complete:function(XMLHttpRequest, textStatus,responseText){  
		        		 //完成方法增强处理     
//		        		fn.complete(XMLHttpRequest, textStatus);
		        		interceptorCompleteLogin(XMLHttpRequest, textStatus,fn);
			            },  
		            error:function(XMLHttpRequest, textStatus){  
		                //错误方法增强处理     
		                fn.error(XMLHttpRequest, textStatus);     
		            },     
		            success:function(data, textStatus){    
		            	interceptorSuccessLogin(data,textStatus,fn);
		            }
		        });     
		       _ajax(_opt);     
		    };  
		    //成功拦截登录
		    function interceptorSuccessLogin(data,textStatus,fn){
		    	//成功回调方法增强处理
            	if(data){
            		if(isJson(data)||isArray(data)){
            			if(data.smallwin_flag&&data.ajaxFlag){
		            		if(data.smallwin_flag=="Y"&&data.ajaxFlag=="Y"){
		            			module.constructor.prototype.paramsStr=data.paramsStr;
		            			module.constructor.prototype.datatype_flag=data.datatype_flag;
		            			module.constructor.prototype.request_method=data.request_method;
			            		module.constructor.prototype.redirect_url=data.redirect_url;
			            		module.constructor.prototype.callback_success=function(calldata, textStatus){
			            			if(module.datatype_flag=="json"){
			            				if(isJson(calldata)){
				            				fn.success(calldata, textStatus); 
				            			}else{
				            				calldata = eval('(' + calldata + ')');
				            				fn.success(calldata, textStatus); 
				            			}
			            			}else if(module.datatype_flag="html"){
			            				fn.success(calldata, textStatus); 
			            			}
								}
			            		module.constructor.prototype.callback_error=function(XMLHttpRequest,code_flag){
			            			
			            			fn.error(XMLHttpRequest, code_flag);  
								}
								toLogin(data.jsessionid);//弹出小窗口
								isToLogin=true;
							}
		            	}else{
							fn.success(data, textStatus); 
						}
            		}else{//处理非json数据,也是区分load
            			  try{
            				  data = eval('(' + data + ')');
            				  if(data.smallwin_flag&&data.ajaxFlag){
				            		if(data.smallwin_flag=="Y"&&data.ajaxFlag=="Y"){
				            			module.constructor.prototype.paramsStr=data.paramsStr;
				            			module.constructor.prototype.datatype_flag=data.datatype_flag;
				            			module.constructor.prototype.request_method=data.request_method;
					            		module.constructor.prototype.redirect_url=data.redirect_url;
					            		module.constructor.prototype.callback_success=function(calldata, textStatus){
					            			if(module.datatype_flag=="json"){
					            				if(isJson(calldata)){
						            				fn.success(calldata, textStatus); 
						            			}else{
						            				calldata = eval('(' + calldata + ')');
						            				fn.success(calldata, textStatus); 
						            			}
					            			}else if(module.datatype_flag="html"){
					            				fn.success(calldata, textStatus); 
					            			}
										}
					            		module.constructor.prototype.callback_error=function(XMLHttpRequest,code_flag){
					            			
					            			fn.error(XMLHttpRequest, code_flag);  
										}
										toLogin(data.jsessionid);//弹出小窗口
										isToLogin=true;
									}
				            	}else{
									fn.success(data, textStatus); 
								}
            			    }catch(e){
            			    	fn.success(data, textStatus); 
            			    }
					}
            	}
		    }
		    //完成拦截登录
		    function interceptorCompleteLogin(XMLHttpRequest, textStatus,fn){
		    	//成功回调方法增强处理3
		    	var data=XMLHttpRequest.responseText;
            	if(data){
            		if(isJson(data)||isArray(data)){
            			if(data.smallwin_flag&&data.ajaxFlag){
		            		if(data.smallwin_flag=="Y"&&data.ajaxFlag=="Y"){
		            			module.constructor.prototype.paramsStr=data.paramsStr;
		            			module.constructor.prototype.datatype_flag=data.datatype_flag;
		            			module.constructor.prototype.request_method=data.request_method;
			            		module.constructor.prototype.redirect_url=data.redirect_url;
			            		module.constructor.prototype.callback_complete=function(XMLHttpRequest, textStatus,responseText){
			            			fn.complete(XMLHttpRequest, textStatus,responseText);  
								}
								if(!isToLogin){
									toLogin(data.jsessionid);//弹出小窗口
								}
							}
		            	}else{
		            		fn.complete(XMLHttpRequest, textStatus);  
						}
            		}else{//处理非json数据,也是区分load
            			  try{
            				  data = eval('(' + data + ')');
            				  if(data.smallwin_flag&&data.ajaxFlag){
				            		if(data.smallwin_flag=="Y"&&data.ajaxFlag=="Y"){
				            			module.constructor.prototype.paramsStr=data.paramsStr;
				            			module.constructor.prototype.datatype_flag=data.datatype_flag;
				            			module.constructor.prototype.request_method=data.request_method;
					            		module.constructor.prototype.redirect_url=data.redirect_url;
					            		module.constructor.prototype.callback_complete=function(XMLHttpRequest, textStatus,responseText){
					            			fn.complete(XMLHttpRequest, textStatus,responseText);  
										}
					            		if(!isToLogin){
											toLogin(data.jsessionid);//弹出小窗口
										}
									}
				            	}else{
				            		fn.complete(XMLHttpRequest, textStatus); 
								}
            			    }catch(e){
            			    	fn.complete(XMLHttpRequest, textStatus); 
            			    }
					}
            	}
		    }
		    /***** 判断是否为json对象 *******
		    * @param obj: 对象(可以是jq取到对象)
		    * @return isjson: 是否是json对象 true/false
		    */
		    function isJson(obj){
			    var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; 
			    return isjson;
		    }
		    function isArray(obj){
		    	var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object array]"; 
			    return isjson;
		    }
		    return $;
});

猜你喜欢

转载自blog.csdn.net/a137268431/article/details/44021217
今日推荐