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 $;
});
小窗口登录对于jquery—ajax重写
最新推荐文章于 2022-05-12 20:25:08 发布