jquery request plugin
大家在进行页面开发的时候,通常使用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
*
* Copyright 2010, KT Group
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: 2010-03-01
*/
// 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);