jquery request plugin

2019/7/22 9:56:44 人评论 次浏览 分类:学习教程

原文链接:http://www.cnblogs.com/ktgroup/archive/2010/03/11/1683323.html
大家在进行页面开发的时候,通常使用jQuery进行处理,为了制定统一的规则,方便后台解析,对Request(请求 )进行了一次封装,这样使用起来比较方便。

如 $.cRequest({action:"XXXX.User" fnName:"getUserList",paging:[2,30]}).doAjax(function(result){

alert(result); 

})

后台可以创建一个对应解析的类,或者直接解析前台传过来的请求 

IUserAction user = Assembly.Load("XXXX").CreateInstance(Context.Request["action"]);  

user.doAction( Context.Request["fnName"] ) ;

  .................... 

/*!

 * jQuery request Plugin 1.01
 * http://www.cnblogs.com/ktgroup/
 *
 * Copyright 2010, KT Group
 * Released under the MIT, BSD, and GPL Licenses.
 * http://www.cnblogs.com/ktgroup/
 *
 * Date: 2010-03-01 
 * Email:mail.ktgroup@gmail.com 
 */
 

// Usage:
// demo one:
// $.cRequest().setAction("aa.aspx").append("ichi","ni","san","you","go").setFnName("getGirl")
//                .setOrder(["cols desc","colg","coln asc"]).setExPostData("Ejyu","Ebyakuu").setPaging(5,13)
//                .setWhere({keyValueObjArray:[{job:"student"},{age:23,op:"<"},{weight:"60kg",op:">="}],opEnumArray:["|","&"]})
//                .setDataType("json").setRequestUrl("ajax.aspx").setAsync(true).setErrPage("/page/err.html")
//                .doAjax(callBack);
// demo two:
// $.cRequest({
//                  action:"bb.aspx",
//                  fnName:"getName",
//                  exPostData:["ex1","ex2"],
//                  postData:["pd1","pd2"],
//                  paging:[6,20],
//                  orderBy:["cols desc","colg","coln asc"],
//                  where:{keyValueObjArray:[{job:"student"},{age:23,op:"<"},{weight:"60kg",op:">="}],opEnumArray:["|","&"]},
//                  dataType:"json",
//                  requestUrl:"ajax.aspx",
//                  async:true,
//                  errPage:"/ajax/err.html"
//               }).doAjax(callBack);
//
// Options:  action -string
//           fnName -string
//           exPostData -array
//           postData -array
//           paging -array
//           orderBy -array
//           where -object
//           dataType -string
//           requestUrl -string
//           async - boolean
//           errPage -string  

 ;(function($){
        $.extend({
            cRequest:function(obj){
                
                //set where condition
                function setWhereCdt(wObj){
                        // keyValueObjArray:[{name:'ken'},{age:23}...]  opEnumArray:[&,|]  
                        // keyValueObj structrue {key:value,op:'>'} op default (=)  
                        // var wObj = {keyValueObjArray:[],opEnumArray:[]};
                    var wArr = [];
                    
                    if(typeof wObj === "object"){
                          if( (wObj.keyValueObjArray instanceof Array) && wObj.opEnumArray instanceof Array ){
                                if((wObj.keyValueObjArray.length - wObj.opEnumArray.length) == 1){
                                    for(var i = 0; i< wObj.keyValueObjArray.length ;i++){
                                        var op = "";
                                        var objKey = "";
                                        var objValue = "";
                                        var hasOp = false;
                                        
                                        for(var key in wObj.keyValueObjArray[i]){
                                            if(key!="op"){
                                                objKey = key;
                                                objValue = wObj.keyValueObjArray[i][key];
                                                
                                                if(typeof objValue === "string"){
                                                    objValue = "'"+objValue+"'";
                                                }
                                                
                                            }else{
                                                hasOp = true;
                                                if(wObj.keyValueObjArray[i][key]!="="){
                                                    op = wObj.keyValueObjArray[i][key];
                                                }else{
                                                    op = "=";
                                                }                                
                                            }
                                        }
                                        if(!hasOp){
                                            op = "=";
                                        }
                                      
                                      
                                        wArr.push($.strFormat("{0} {2} {1}",objKey,objValue,op));
                                        
                                        switch(wObj.opEnumArray[i]){
                                            case "&":
                                                wArr.push("and");
                                                break;
                                            case "|":
                                                wArr.push("or");
                                                break;
                                            default:break;
                                        }
                                }
                            }
                        }
                    }
                    return wArr.join(" ");
                }
                
                
                //set orderBy
                function setOrderByCdt(arr){
                    //start with charater or digital
                    //var reg = /[a-zA-Z][a-zA-Z\d]*/gi;
                    //default asc
                    //var regTaxis = /desc/gi;
                    var orderArr = [];
                    if(arr instanceof Array){
                        if(arr.length){
                            for(var i=0; i<arr.length; i++){
                                if(typeof arr[i] === "string"){
                                    var tArr = arr[i].split(" ");
                                    if(tArr[1] == "desc" || tArr[1] == "asc"){
                                        orderArr.push(arr[i]);
                                    }else{
                                        orderArr.push(arr[i] + " " + "asc");
                                    }
                                }
                            }
                        }
                    }
                    return orderArr;
                }

                if(!obj) var obj = {};
                obj.async = obj.async || true; //async request
                obj.requestUrl = obj.requestUrl || "AjaxHandler.ashx"; //request url
                obj.dataType = obj.dataType || "json";
                obj.action = obj.action || ""; //which action to route
                obj.fnName = obj.fnName || ""; //request method
                obj.exPostData = obj.exPostData || []; //extension data
                obj.postData = obj.postData || []; //post data
                obj.paging = obj.paging || [1,20]; //paging setting
                obj.orderBy = setOrderByCdt(obj.orderBy) || []; //orderby setting
                obj.where = setWhereCdt(obj.where) || []; //where condition
                obj.errPage = obj.errPage || "error.html"; //error page
                
                
                //create req class
                function req(){
                    
                    //set action
                    this.setAction = function(act){
                        if(typeof act === "string"){
                            obj.action = act;
                        }
                        return this;
                    }
                    
                    //set request method
                    this.setFnName = function(fnName){
                        if(typeof fnName === "string"){
                            obj.fnName = fnName;
                        }
                        return this;
                    }
                    
                    //append post data
                    this.append = function(){
                        if(arguments.length){
                            for(var i = 0 ;i<arguments.length;i++){
                                obj.postData.push(arguments[i]);
                            }
                        }
                        return this;
                    }
                    
                    //set extension post data
                    this.setExPostData = function(){
                        if(arguments.length){
                            for(var i=0; i<arguments.length; i++){
                                obj.exPostData.push(arguments[i]);
                            }
                        }
                        return this;
                    }
                    
                    //paing setting
                    this.setPaging = function(pageIndex,pageSize){
                        //page index 1 by default and page size is 20
                        if(obj.paging[0] == 1 && obj.paging[1] == 20)obj.paging = [];
                        typeof pageIndex === "number" ? obj.paging.push(pageIndex) : obj.paging.push(1);
                        typeof pageSize === "number" ? obj.paging.push(pageSize) :obj.paging.push(20);
                        return this; 
                    }
                    

                    //set order fields
                    this.setOrder = function(oArr){
                        obj.orderBy = setOrderByCdt(oArr);
                        return this;
                    }
                    
                    //set where condition
                    this.setWhere = function(wObj){
                        obj.where = setWhereCdt(wObj);
                        return this;
                    }
                    
                    //get pass Data
                    function getPassData(){
                        var jsonObj = {
                                        action:obj.action,
                                        fnName:obj.fnName,
                                        postData:obj.postData.join(),
                                        where:obj.where,
                                        orderBy:obj.orderBy.join(),
                                        paging:obj.paging.join(),
                                        exPostData:obj.exPostData.join()
                                      }
                        return jsonObj;
                    }
                    
                    //set data type
                    this.setDataType = function(dt){
                        var regDataType = /^(json|xml|jsonp|text|html)$/gi;
                        if(regDataType.test(dt)){
                            obj.dataType = dt;
                        }
                        return this;
                    }
                    
                    //set request url
                    this.setRequestUrl = function(rUrl){
                        if(typeof rUrl === "string"){
                           // obj.requestUrl = encodeURI(rUrl);
                           obj.requestUrl = rUrl;
                        }
                        return this;
                    }
                    
                    //set aysnc request
                    this.setAsync = function(isAsync){
                        if(typeof isAsync === "boolean"){
                            obj.async = isAsync;
                        }
                        return this;
                    }
                    
                    //set error page
                    this.setErrPage = function(errPath){
                        if(typeof errPath === "string"){
                            //obj.errPage = encodeURI(errPath);
                            obj.errPage = errPath;
                        }
                        return this;
                    }
                    
                    //do ajax
                    this.doAjax = function(callback){
                          $.ajax({
                               type: "POST",
                               url: obj.requestUrl,
                               async:obj.async,
                               data: getPassData(),
                               dataType:obj.dataType,
                               success: function(msg){ 
                                    if(typeof callback === "function"){
                                         callback(msg);
                                    }                                   
                              },
                              error:function(ss){ //document.write( ss.responseText)
                                        alert("请求出错!");
                              }
                          });
                    }
                }
                return new req();
            },
            strFormat:function(){
                if( arguments.length == 0 )
                    return null;
                var str = arguments[0]; 
                for(var i=1;i<arguments.length;i++) {
                    var re = new RegExp('\\{' + (i-1) + '\\}','gm');
                    str = str.replace(re, arguments[i]);
                }
                return str;
            },
           searchParse:function(){
                var resultObj = {};
                var search = window.location.search;
                if(search && search.length > 1){
                    var search = search.substring(1);
                    var items = search.split('&');     
                    for(var index = 0 ; index < items.length ; index++ ){   
                        if(! items[index]){
                            continue;
                        }             
                        var kv = items[index].split('='); 
                        resultObj[kv[0]] = typeof kv[1] === "undefined" ? "":kv[1];
                    }                
                } 
                return resultObj;       
               }
        });
        
    })(jQuery);

转载于:https://www.cnblogs.com/ktgroup/archive/2010/03/11/1683323.html

相关资讯

    暂无相关的资讯...

共有访客发表了评论 网友评论

验证码: 看不清楚?
    -->