/** * @author herong 框架-Ajax基类 */ var CFWAjax = _FW.fCreateClass(); /** * Ajax API */ CFWAjax.prototype = { /** * 初始化 * */ fInitialize : function(options) { }, /** * ajax调用Service * 通过ajax直接请求调用中间层业务处理类(Service) * @param sServiceName * (必需) 业务Service类名和方法名,格式: 首字母小写的类名.方法名(方法入参类型必须为IDTO) * @param mParams * 入参数json对象,key要求大写 * @param sMessage * 提示信息 * @param fnSuccessCallback * (必需) 成功回调方法,方法格式:function(mData){} * @param fnFailureCallback * 失败回调方法,方法格式:function(oRequest, sTextStatus, oErrorThrown) * 此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。 * @param bSync * 调用方式:同步/异步。true :异步,false:同步,默认为false * *
* 使用举例:
* //传参
* var mParams = {
* "ID" : "1111",
* "NAME" : "herong"
* };
*
* CFW.oAJax.doService("bxgxService.query", mParams, "调用Service ",
* function(mData) {
* //调用成功后返回数据
* }
* );
*
* 或:
*
* CFW.oAJax.doService("bxgxService.query", mParams,
* function(mData) {
* //调用成功后返回数据
* }, function(oRequest, sTextStatus, oErrorThrown) {
* //调用失败处理。此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。
* }
* );
*
*/
doService : function(sServiceName, mParams,sMessage, fnSuccessCallback,
fnFailureCallback, bSync) {
var aServices=[];
var mShareParameters={};
var mServices={};
if(!sServiceName){
return this;
}
var serviceParam=sServiceName.split(".");//service 参数数组,包括service名和方法名
if(serviceParam.length==0 || serviceParam.length>2){
CFW.oWin.fnAlert('服务(sServiceName)定义不正确,请核实!');
return this;
}
if(!serviceParam[0] || !serviceParam[1]){
CFW.oWin.fnAlert('服务定义的serviceId和method不可为空');
return this;
}
if(mParams){
if(typeof mParams !='object'
||jQuery.isArray(mParams)){
CFW.oWin.fnAlert('服务定义的参数必须是map!');
return;
}
}
mServices.serviceId=serviceParam[0];
mServices.method=serviceParam[1];
mServices.parameters=mParams;
aServices.push(mServices);
var bSync1 = true;
var fnSuccess = fnSuccessCallback;
var fnFailure = fnFailureCallback;
if(bSync!=null&&typeof bSync=='boolean'){
if(!bSync){
bSync1 = false;
}
}
this._fnDoAjax(aServices,mShareParameters,sMessage,fnSuccess,fnFailure,bSync1);
},
/**
* ajax调用存储过程
* 通过ajax直接请求调用存储过程
* @param sProcName
* (必需) 业务存储过程全名,格式:包名.过程名
* @param mParams
* 入参数json对象,key要求大写
* @param sMessage
* 提示信息
* @param fnSuccessCallback
* (必需) 成功回调方法,方法格式:function(mData){}
* @param fnFailureCallback
* 失败回调方法,方法格式:function(oRequest, sTextStatus, oErrorThrown)
* 此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。
* @param bSync
* 调用方式:同步/异步。true :异步,false:同步,默认为false
*
*
* 使用举例:
* //传参
* var mParams = {
* "ID" : "1111",
* "NAME" : "herong"
* };
*
* CFW.oAJax.doProc("pkg_sms.p_test", mParams, null,
* function(mData) {
* //调用成功后返回数据
* }
* );
*
* 或:
*
* CFW.oAJax.doProc("pkg_sms.p_test", mParams, "调用存储过程",
* function(mData) {
* //调用成功后返回数据
* }, function(oRequest, sTextStatus, oErrorThrown) {
* //调用失败处理。此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。
* }
* );
*
*
*/
doProc : function(sProcName, mParams,sMessage,fnSuccessCallback, fnFailureCallback,
bSync) {
var aServices=[];
var mShareParameters={};
var mServices={};
if(!sProcName){
return this;
}
if(mParams){
if(typeof mParams !='object'
||jQuery.isArray(mParams)){
CFW.oWin.fnAlert('服务定义的参数必须是map!');
return;
}
}
mParams['']=sProcName;
mServices.serviceId='directJdbcService';
mServices.method='savePointProcedure';
mServices.parameters=mParams;
aServices.push(mServices);
var bSync1 = true;
var fnSuccess = fnSuccessCallback;
var fnFailure = fnFailureCallback;
if(bSync!=null&&typeof bSync=='boolean'){
if(!bSync){
bSync1 = false;
}
}
this._fnDoAjax(aServices,mShareParameters,sMessage,fnSuccess,fnFailure,bSync1);
},
/**
* ajax执行单个查询
* 通过ajax直接请求Mapper单个查询
* @param sId
* (必需) Mapper配置ID
* @param mParams
* 入参
* @param sMessage
* 提示信息
* @param fnSuccessCallback
* (必需) 成功回调方法,方法格式:function(mData){}
* @param fnFailureCallback
* 失败回调方法,方法格式:function(oRequest, sTextStatus, oErrorThrown)
* 此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。
* @param sTransform
* 结果集的转换规则:null(无转换)、'firstRow'(取首行)、'breakdown'(分列),值不区分大小写
* @param bSync
* 调用方式:同步/异步。true :异步,false:同步,默认为false
*
*
* 使用举例:
* //传参
* var mParams = {
* "ID" : "1111",
* "NAME" : "herong"
* };
*
* CFW.oAJax.doQuery("FW_TEST.TBL_Q", mParams, "调用Mapper ",
* function(mData) {
* //调用成功后返回数据
* }
* );
*
* 或:
*
* CFW.oAJax.doQuery("FW_TEST.TBL_Q", mParams,
* function(mData) {
* //调用成功后返回数据
* }, function(oRequest, sTextStatus, oErrorThrown) {
* //调用失败处理。此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。
* }
* );
*
*
*/
doQuery : function(sId, mParams, sMessage, fnSuccessCallback,
fnFailureCallback, sTransform, bSync) {
var aServices=[];
var mShareParameters={};
var mServices={};
if(!sId){
CFW.oWin.fnAlert('查询服务必须指定configId属性');
return this;
}
if(mParams){
if(typeof mParams !='object'
||jQuery.isArray(mParams)){
CFW.oWin.fnAlert('服务定义的参数必须是map!');
return this;
}
}
//如果指定了transform,那么值只能是规定的
if(sTransform){
if('FIRSTROW'!=sTransform.toUpperCase()
&&'BREAKDOWN'!=sTransform.toUpperCase()){
CFW.oWin.fnAlert('transform属性不正确');
return this;
}
}
mParams["_commDo"]=sId;
mServices.serviceId='commService';
mServices.method='query';
mServices.parameters=mParams;
mServices.transform=sTransform;
aServices.push(mServices);
var bSync1 = true;
var fnSuccess = fnSuccessCallback;
var fnFailure = fnFailureCallback;
if(bSync!=null&&typeof bSync=='boolean'){
if(!bSync){
bSync1 = false;
}
}
this._fnDoAjax(aServices,mShareParameters,sMessage,fnSuccess,fnFailure,bSync1);
},
/**
* ajax混合调用,同时调用多个操作
* 同时调用多个操作 在同一个事物中同时调用多个Action, action: 服务Id,不可为空 * transform: 结果集的转换规则(返回结果集合List* * @param aActions * (必需) 操作定义,格式: [ * {"action":"action1","transform":"","shareResults":"false","useShare":"","shareNotNull":""}, * {"action":"action2","transform":"","shareResults":"false","useShare":"","shareNotNull":""} ] * * @param mParams * 入参,必须是object,object的属性名代表参数名,属性值代表参数值。 * @param sMessage * 提示信息 * @param fnSuccessCallback * (必需) 成功回调方法,方法格式:function(mData){} * @param fnFailureCallback * 失败回调方法,方法格式:function(oRequest, sTextStatus, oErrorThrown) * 此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。 * @param bSync * 调用方式:同步/异步。true :异步,false:同步,默认为false * *
* 使用举例:
* var action1 = [
* {"action":"bxgxService.query"},
* {"action":"pkg_sms.p_test"}
* ];
*
* var action2 = [
* {"action":"bxgxService.query","transform":"firstRow","shareResults":"true","useShare":"","shareNotNull":""},
* {"action":"pkg_sms.p_test","transform":"","shareResults":"false","useShare":"true","shareNotNull":""}
* ];
* //传参
* var mParams = {
* "ID" : "1111",
* "NAME" : "herong"
* };
*
* CFW.oAJax.doAction(action1, mParams, "混合调用 ",
* function(mData) {
* //调用成功后返回数据
* }
* );
*
* 或:
*
* CFW.oAJax.doAction(action2, mParams,
* function(mData) {
* //调用成功后返回数据
* }, function(oRequest, sTextStatus, oErrorThrown) {
* //调用失败处理。此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。
* }
* );
*
*
*/
doAction : function(aActions, mParams, sMessage,fnSuccessCallback,
fnFailureCallback, bSync) {
if(aActions.length==0){
CFW.oWin.fnAlert('请至少添加一个服务');
return;
}
var aServices=[];
var mShareParameters={};
for(var index=0; index同时调用多个操作 在同一个事物中同时调用多个Action, action: 服务Id,不可为空 * transform: 结果集的转换规则(返回结果集合List* * @param aServices * service数组 * * @param mShareParameters * 共享参数 * @param sMessage * 提示信息 * @param fnSuccessCallback * (必需) 成功回调方法,方法格式:function(mData){} * @param fnFailureCallback * 失败回调方法,方法格式:function(oRequest, sTextStatus, oErrorThrown) * 此回调可以根据情况覆盖框架默认错误处理,框架默认错误处理已满足大部分需求。 * @param bSync * 调用方式:同步/异步。true :异步,false:同步,默认为false * */ _fnDoAjax : function(aServices,mShareParameters,sMessage,fnSuccessCallback,fnFailureCallback,bSync){ var mRequest={}; if(!sMessage){ sMessage='正在请求服务,请稍候...'; }else if(typeof sMessage != 'string'){ CFW.oWin.fnAlert('入参错误,请检查程序!'); return ; } var fnShowMSG=this._fnShowMsg(sMessage, -1); if(AJAX_SHOW_PROCESSBAR){ CFW.oTip.fnOpenProcess(); } $.ajax({ url:contextPath+'/ajaxAdapter.do' ,data:{parameters:JSON.stringify(aServices),shareArguments:JSON.stringify(mShareParameters)} ,dataType :'json' ,cache:false ,async:bSync ,contentType: "application/x-www-form-urlencoded; charset=utf-8" ,type:'post' ,error:function (request, textStatus, errorThrown) { if(!fnFailureCallback){ CFW.oWin.fnAlert('数据请求错误!'); }else{ fnFailureCallback('数据请求错误!', {'type':'App'}); } } ,success:function (data, textStatus) { if(data!=null && data[headtoken]!=null){ token=data[headtoken];//更新全局变量token标志 } //校验业务处理是否正确执行 if("1"!=data.FHZ){//出错了,弹出错误提醒 if ("loginTimeout" == data.FHZ) { if(window.confirm(data.MSG||'')){ window.top.location.href=_selfUrl; } } else if("CSRF" == data.FHZ){ showMsg(data.MSG||'',3); if(fnFailureCallback){ fnFailureCallback(data.MSG||'', {'type':data.FHZ}, data.MSG); } return; } else { if(fnFailureCallback){ fnFailureCallback(data.MSG||'', {'type':data.FHZ}, data.MSG); }else{ CFW.oWin.fnAlertStyle(data.MSG||'',{'type':data.FHZ}); } } }else if(!fnSuccessCallback){ }else{ fnSuccessCallback(data.RTN); } } ,beforeSend:function(XMLHttpRequest){ var cToken = $.cookie(headtoken) || token;XMLHttpRequest.setRequestHeader(headtoken,cToken); $.data(mRequest,'msg',fnShowMSG); //createProgressBar(); } ,complete:function( ){ jQuery($.data(mRequest,'msg')).remove(); if(AJAX_SHOW_PROCESSBAR){ CFW.oTip.fnCloseProcess(); } } }); }, /** * 在页面的左上角显示错误消息 * @param sMsg 消息内容 * @param iDelay 秒为单位,0或者负数表示不自动隐藏 **/ _fnShowMsg : function(sMsg,iDelay){ var framework_message_layer; var clearIntervalID; var recurrectLocation=function(){ if(framework_message_layer==null) {clearInterval(clearIntervalID);return;} var posX,posY; if (window.innerHeight) { posX = window.pageXOffset; posY = window.pageYOffset; } else if (document.documentElement && document.documentElement.scrollTop) { posX = document.documentElement.scrollLeft; posY = document.documentElement.scrollTop; } else if (document.body) { posX = document.body.scrollLeft; posY = document.body.scrollTop; } framework_message_layer.style.top=String(posY+10)+'px'; framework_message_layer.style.right=String(posX+10)+'px'; }; if(framework_message_layer == null){ framework_message_layer=document.createElement('div'); framework_message_layer.className='err_message_blank_board'; document.body.appendChild(framework_message_layer); clearIntervalID=window.setInterval(recurrectLocation,100); recurrectLocation(); } var my_div = document.createElement('div'); my_div.className='err_message'; //Element.extend(my_div); my_div.innerHTML=sMsg; framework_message_layer.appendChild(my_div); recurrectLocation(); if(iDelay>0){ setTimeout(function(){ jQuery(my_div).remove(); if(jQuery(framework_message_layer).is(':empty')){ jQuery(framework_message_layer).remove(); window.clearInterval(clearIntervalID); framework_message_layer=null; } },iDelay*1000); }else{ return my_div; } } };