• ajax.js


      1 /**通用ajax服务的定义对象
      2 
      3  * services可以是单个服务对象,也可以是service服务数组
      4  * 具体服务的定义请参考appendServices成员函数
      5  */
      6 function Service(services){
      7     //一直到299行
      8     this.services=[];
      9     this.shareParameters={};
     10     /**添加共享参数,在这里统一设置共享参数
     11      */
     12     this.addShareParameters=function(shareParameters){
     13         this.shareParameters=shareParameters;
     14         return this;
     15     };
     16     /**
     17      * 批量调用一般服务
     18 
     19      * 入参可以是一个调用服务的数组或者单个调用服务
     20 
     21      * 每个调用服务有下面的属性
     22 
     23      * serviceId 服务Id,不可为空
     24 
     25      * method 服务方法名,不可为空
     26      * parameters 服务参数,必须是object,object的属性名代表参数名,属性值代表参数值。
     27 
     28      * transform:结果集的转换规则(返回结果集合List<Map<String,Object>>时才会用到):null(无转换)、'firstRow'(取首行)、'breakdown'(分列),值不区分大小写 
     29      * shareResults 共享服务的返回结果,默认不共享false,如果后续服务需要使用到结果里面的参数,
     30      *   那么就需要明确指定。该参数可以是 boolean,array或者object,为true时表示全部共享;
     31      *   数组可以指定返回值中需要共享的值的名,这样返回值的键值对应关系共享;
     32      *   object可以额外指定共享名的别名,当要求返回值以新的字段名共享、
     33 
     34      *   或者一个以多个新别名共享时就需要用到这种类型,object的属性名表示结果集中需要共享的字段名,
     35      *   属性值表示新的字段名;
     36 
     37      *   参数共享处理列表结果集时,整个结果集的数据存放在别名为空串的特殊key上。如果本业务没有返回结果,那么参数共享无效。
     38 
     39      * useShare 使用共享参数标志,定义方式与shareResults一样,意义正好想对应。该参数指明如果从共享参数中获取要的值。
     40 
     41      * shareNotNull 校验共享参数是否为空,作为useShare的附属属性。
     42 
     43      *   有时希望如果获取到的共享参数是空的,那么不继续执行,那么可以在这里指定哪些一定不能为空。
     44 
     45      *   目前只允许三种取值,null,true和别名数组,null表示不校验,true表示全校验,别名数组表示只校验指定的值(别名是指useShare中新的别名,并非共享池里面的共享别名)。
     46 
     47      */
     48     this.appendServices=function(services){//到128行
     49         if(!services){
     50             return this;
     51         }
     52         //默认按批量形式添加服务,如果是单个,那么用数组包装
     53 
     54         var tmp_services=services;
     55         if(!$.isArray(tmp_services)){
     56             tmp_services = [tmp_services];
     57         }
     58         //每个service必须有serviceId,method
     59         for(index in tmp_services){
     60             //检查必录项
     61             if(!tmp_services[index].serviceId||!tmp_services[index].method){
     62                 FWalert('服务定义的serviceId和method不可为空');
     63                 return this;
     64             }
     65             //检查可选项
     66             if(tmp_services[index].parameters){
     67                 if(typeof tmp_services[index].parameters !='object'
     68                     ||jQuery.isArray(tmp_services[index].parameters)){
     69                     FWalert('服务定义的参数必须是map!');
     70                     return;
     71                 }
     72             }
     73             //如果指定了transform,那么值只能是规定的
     74 
     75             if(tmp_services[index].transform){
     76                 if('FIRSTROW'!=tmp_services[index].transform.toUpperCase()
     77                         &&'BREAKDOWN'!=tmp_services[index].transform.toUpperCase()){
     78                     FWalert('transform属性不正确');
     79                     return this;
     80                 }
     81             }
     82             //shareResults
     83             //转换shareResults,统一转换成map,或者boolean
     84             shareResults = tmp_services[index].shareResults;
     85             if(shareResults){
     86                 if(typeof shareResults =='boolean'){
     87                     if(!shareResults){
     88                         shareResults =null;
     89                     }
     90                 }else if(jQuery.isArray(shareResults)){
     91                     //转化为map
     92                     shareResults={};
     93                     $.each(tmp_services[index].shareResults,function(indexInArray, valueOfElement){
     94                         shareResults[valueOfElement]=valueOfElement;
     95                     });
     96                     tmp_services[index].shareResults =shareResults;
     97                 }
     98             }
     99             //useShare
    100             useShare = tmp_services[index].useShare;
    101             if(useShare){
    102                 if(typeof useShare =='boolean'){
    103                     if(!useShare){
    104                         tmp_services[index].useShare =null;
    105                     }
    106                 }else if(jQuery.isArray(useShare)){
    107                     //转化为map
    108                     useShare={};
    109                     $.each(tmp_services[index].useShare,function(indexInArray, valueOfElement){
    110                         useShare[valueOfElement]=valueOfElement;
    111                     });
    112                     tmp_services[index].useShare =useShare;
    113                 }
    114             }
    115             //shareNotNull,只允许true和字符串数组
    116             shareNotNull = tmp_services[index].shareNotNull;
    117             if(shareNotNull){
    118                 if(typeof shareNotNull !=='boolean' && !jQuery.isArray(shareNotNull)){
    119                     FWalert('参数[shareNotNull]的取值必须是true或者字符串数组!');
    120                     return this;
    121                 }else if(shareNotNull ===false){
    122                     tmp_services[index].shareNotNull = null;
    123                 }
    124             }
    125         }
    126         this.services=this.services.concat(tmp_services);
    127         return this;
    128     };
    129     /**定义添加直接调用存储过程的服务
    130 
    131      * 可以批量添加存储过程。每个存储过程服务的有以下属性:
    132      * procName、parameters、shareResults、useShare,
    133 
    134      * 其中procName指明存储过程的名称,其他的请参考appendServices;parameters中的参数名不能是procName
    135      * 批量添加存储过程时,用数组存储各个存储过程作为参数传入即可。
    136 
    137      * ...
    138      */
    139     this.appendProc=function(procedures){
    140         如果传入的参数是空,null,''等,那么就返回该对象,实际上就是返回 new Service() 这个对象,@wyl
    141         if(!procedures){
    142             return this;
    143         }
    144         默认按批量形式添加服务,如果是单个,那么用数组包装
    145         如果传入的不是数组,那么就把这个对象包装成数组,@wyl,并且用临时变量存起来
    146         tmp_procedures=procedures;
    147         if(!$.isArray(tmp_procedures)){
    148             tmp_procedures = [tmp_procedures];
    149         }
    150         //遍历,一个一个的处理
    151         procedure_services =[];
    152         for (index in tmp_procedures){
    153             //必须有configId属性
    154 
    155             procedure = tmp_procedures[index];
    156             if(!procedure.procName){
    157                 FWalert('存储过程服务必须指定procName属性');
    158                 return this;
    159             }
    160             procedure = $.extend(true,{},procedure,
    161                     {serviceId:'directJdbcService',method:'savePointProcedure'
    162                         ,parameters:{'':procedure.procName}});
    163             //去掉存储过程名称
    164             delete procedure.procName;
    165             //添加到服务列表
    166 
    167             procedure_services.push(procedure);
    168         }
    169         return this.appendServices(procedure_services);
    170     };
    171     /**定义添加调用预定义查询语句的服务
    172      * 可以批量添加查询语句。每个查询服务的包括以下属性:
    173      * configId、transform、indices,parameters、shareResults、useShare。
    174 
    175      * configId是Mapper.xml中的配置ID(注意写上空间名)
    176      * parameters是传递给configId的参数
    177 
    178      * transform:结果集的转换规则:null(无转换)、'firstRow'(取首行)、'breakdown'(分列),值不区分大小写
    179 
    180      * ,该参数要求传入字符串数组类型,元素值指明参数Map中的一个参数名。
    181 
    182      * 其它属性将作为查询语句的备用参数。其他的请参考appendServices;
    183 
    184      * 批量添加查询服务时,用数组存储各个查询服务作为参数传入即可。
    185 
    186      * ...
    187      */
    188     this.appendQuery=function(querys){
    189         if(!querys){
    190             return this;
    191         }
    192         //默认按批量形式添加服务,如果是单个,那么用数组包装
    193 
    194         tmp_querys=querys;
    195         if(!$.isArray(tmp_querys)){
    196             tmp_querys = [tmp_querys];
    197         }
    198         //遍历,一个一个的处理
    199         query_services = [];
    200         for (index in tmp_querys){
    201             //必须有configId属性
    202 
    203             var query = tmp_querys[index];
    204             if(!query.configId){
    205                 FWalert('查询服务必须指定configId属性');
    206                 return this;
    207             }
    208             //参数索引放入参数串中
    209             query = $.extend(true,{},query,
    210                     {serviceId:'commService',method:'query'
    211                         ,parameters:{'_commDo':query.configId}});
    212             
    213             //去掉存储过程名称,和参数索引
    214             delete query.configId;
    215             
    216             //添加到服务列表
    217 
    218             query_services.push(query);
    219         }
    220         return this.appendServices(query_services);
    221     };
    222     /**定义触发ajax的事件
    223 
    224      * message:本次ajax请求的名称,可选。
    225 
    226      * success:处理成功后触发的函数,原型是function(data)。
    227 
    228      * error:处理是否时触发的函数,原型是function(XMLHttpRequest, textStatus, errorThrown);
    229      * async:同步或是异步,同步为false、异步是true
    230      */
    231     this.sentAjax=function(message,success,error,async){
    232         if(this.services.length==0){
    233             FWalert('请至少添加一个服务');
    234             return;
    235         }
    236         var t_async = true;
    237         var t_message = message;
    238         var t_success = success;
    239         var t_error = error;
    240         if(jQuery.isFunction(message)){
    241             t_message = '正在请求服务,请稍候...';
    242             t_success =message;
    243             t_error = success;
    244         }else if (typeof message != 'string'){
    245             FWalert('入参错误,请检查程序!');
    246             return ;
    247         }
    248         if(async!=null&&typeof async=='boolean'){
    249             if(!async){
    250                 t_async = false;
    251             }
    252         }
    253         var thisrequest={};
    254          $.ajax({
    255             url:contextPath+'/ajax.do'
    256             ,data:{parameters:JSON.stringify(this.services),shareArguments:JSON.stringify(this.shareParameters)}
    257             ,dataType :'json'
    258             ,cache:false
    259             ,async:t_async
    260             ,type:'post'
    261             ,error:function (request, textStatus, errorThrown) {
    262                 if(!t_error){
    263                     FWalert('数据请求错误!');    
    264                 }else{
    265                     t_error(request, textStatus, errorThrown);
    266                 }
    267                 }
    268             ,success:function (data, textStatus) {
    269                 //校验业务处理是否正确执行
    270                 if("1"!=data.FHZ){//出错了,弹出错误提醒
    271                     if ("loginTimeout" == data.FHZ) {
    272                         if(window.confirm(data.MSG||'')){
    273                             window.top.location.href=_selfUrl;
    274                         }
    275                     } else {
    276                         if(t_error){
    277                             t_error(data.MSG||'', 'serviceErr', data.MSG);
    278                         }else{
    279                             FWalert(data.MSG||'');
    280                         }
    281                     }
    282                 }else if(!t_success){
    283                 }else{
    284                     t_success(data.RTN);
    285                 }
    286             }
    287             ,beforeSend:function( ){
    288                 $.data(thisrequest,'msg',showMsg(t_message,-1));
    289                 //createProgressBar();
    290             }
    291             ,complete:function( ){
    292                 hideMsg($.data(thisrequest,'msg'));
    293             }
    294          });
    295     };
    296     //添加参数
    297     if(services){
    298         this.appendServices(services);
    299     }
    300 }
    301 /**
    302 * 在页面的左上角显示错误消息
    303 
    304 * @param msg 消息内容
    305 * @param timeout 秒为单位,0或者负数表示不自动隐藏
    306 * @author 吴英德
    307 
    308 **/
    309 var framework_message_layer;
    310 var clearIntervalID;
    311 function showMsg(msg,delay){
    312 
    313     var recurrectLocation=function(){
    314         if(framework_message_layer==null)
    315                 {clearInterval(clearIntervalID);return;}
    316             var posX,posY;
    317         if (window.innerHeight) {
    318             posX = window.pageXOffset;
    319             posY = window.pageYOffset;
    320         }
    321         else if (document.documentElement && document.documentElement.scrollTop) {
    322             posX = document.documentElement.scrollLeft;
    323             posY = document.documentElement.scrollTop;
    324         }
    325         else if (document.body) {
    326             posX = document.body.scrollLeft;
    327             posY = document.body.scrollTop;
    328         }
    329         framework_message_layer.style.top=String(posY+10)+'px';
    330         framework_message_layer.style.right=String(posX+10)+'px';
    331     };
    332     if(framework_message_layer == null){
    333         framework_message_layer=document.createElement('div');
    334         framework_message_layer.className='err_message_blank_board';
    335         document.body.appendChild(framework_message_layer);
    336         clearIntervalID=window.setInterval(recurrectLocation,100);
    337         recurrectLocation();
    338     }
    339     var my_div = document.createElement('div');
    340     my_div.className='err_message';
    341     //Element.extend(my_div);
    342     my_div.innerHTML=msg;
    343     framework_message_layer.appendChild(my_div);
    344     recurrectLocation();
    345     if(delay>0){
    346         setTimeout(function(){
    347             jQuery(my_div).remove();
    348             if(jQuery(framework_message_layer).is(':empty')){
    349                 jQuery(framework_message_layer).remove();
    350                 window.clearInterval(clearIntervalID);
    351                 framework_message_layer=null;
    352             }
    353         },delay*1000);
    354     }else{
    355         return my_div;
    356     }
    357 }
    358 
    359 /**隐藏右上角对应的消息
    360  * @param object 某消息对象,来自showMsg的返回值
    361 
    362  */
    363 function hideMsg(object){
    364     jQuery(object).remove();
    365 }
  • 相关阅读:
    [原]使用ASP.NET MVC构建RESTful服务
    [原]ASP.NET MVC 3 使用 DotNetOpenAuth 实现SSO
    ASP.NET MVC + RESTful服务之HttpStatusResult
    [原]ASP.NET MVC 3 Razor 多国语言参考解决方案 补充三
    [原]ASP.NET MVC 3 使用jqGrid之TreeGrid
    [原]ASP.NET MVC 3 Razor 多国语言参考解决方案 补充
    vsftp
    对付CC攻击不必动用防火墙
    Symfony and Godaddy
    godaddy的VPS使用SSH登录的方法
  • 原文地址:https://www.cnblogs.com/Sunnor/p/5170398.html
Copyright © 2020-2023  润新知