之前写了一篇

ASP.NET中一种超简单的Ajax解决方案

最近把他拿出来更新了下,把demo也搞的更详细了一点

  • 加入了blqw.Json,所以支持更多类型参数和返回值
  • 优化了对exception的处理
  • 增加了分页Pager对象
  • 优化了注册页面变量的方式,更安全了

特点

首先他不需要任何的配置文件

没有额外dll ,他是开源的,只要你愿意, 他只有2个cs文件

使用之后前台js调用后台方法都是采用同步模式,这样更加接近C#后台的编程方式

var user = PostAjax8();
var message = ["姓名:"+ user.Name, "年龄:"+ user.Age, "生日:"+ user.Birthday].join("\n\r");
alert(message);

如果想实现异步效果需要使用setTimeout方法,比如这样

text1.value = "正在获取数据...";
setTimeout(function () {
    var a = PostAjax1();
    text1.value = "服务器返回:" + a;
}, 0);

C#的异常可以反映到js中

让Ajax更简单

所以你可以在js直接使用中的try..catch..来处理它

function ajax8() {
    try {
        var user = PostAjax8();
        var message = ["姓名:" + user.Name, "年龄:" + user.Age, "生日:" + user.Birthday].join("\n\r");
        alert(message);
    } catch (e) {
        alert("出现异常:" + e.message);
    }
}

 异常堆栈可以通过blqw.Ajax2.ThrowStack=true;设置,将详细堆栈信息也输出到前端页面js中

让Ajax更简单

运行方式

首先是在Page_Load,或者前台页面中<% ... ... %>中加入

Ajax2.Register(this);

在该方法中,判断当前页面参数,如果普通请求,就注册js代码到页面中

debug模式中注册完整js

  1 #region javascript full
  2 #if DEBUG
  3         const string JAVASCRIPT = @"
  4     window.blqw = window.blqw || {};
  5     blqw.Ajax = blqw.Ajax || {};
  6     blqw.Ajax.GetRequest = function () {
  7         if (window.ActiveXObject) {
  8             try {
  9                 return new ActiveXObject('Msxml2.XMLHTTP');
 10             } catch (e) {
 11                 return new ActiveXObject('Microsoft.XMLHTTP');
 12             }
 13         }
 14         else if (window.XMLHttpRequest) {
 15             return new XMLHttpRequest();
 16         }
 17     }
 18 
 19     blqw.Ajax.Throw = function(e){{
 20             function AjaxError(message,stack,type){{
 21                 this.name = 'AjaxError';
 22                 this.type = type;
 23                 this.message = message;
 24                 this.stack = stack;
 25                 this.innerError = null;
 26                 this.toString = function () {{
 27                                     return 'message:' + this.message + '\r\n' + 'stack:' + e.stack;
 28                                 }};
 29             }};
 30             var err = new AjaxError(e.message,e.stack,e.type);
 31             var e1 = err;
 32             while(e.innerError){{
 33                 e = e.innerError;
 34                 e1.innerError = new AjaxError(e.message,e.stack,e.type);
 35                 e1 = e1.innerError;
 36             }}
 37             return err;
 38         }}
 39 
 40     blqw.Ajax.Exec = function (method, args) {
 41             var getStr = function (obj) {
 42                 if (obj == null) return '';
 43                 var type = typeof (obj);
 44                 switch (type) {
 45                     case 'number':
 46                     case 'boolean':
 47                         return obj.toString();
 48                     case 'string':
 49                         return encodeURIComponent(obj.replace('\0', '\0\0'));
 50                     case 'undefined':
 51                         return '';
 52                     case 'function':
 53                         try {
 54                             return arguments.callee(obj());
 55                         } catch (e) {
 56                             return '';
 57                         }
 58                     case 'object':
 59                         type = Object.prototype.toString.apply(obj);
 60                         switch (type) {
 61                             case '[object Date]':
 62                                 return encodeURIComponent(obj.getFullYear() + '-' +
 63                             (obj.getMonth() + 1) + '-' +
 64                             obj.getDate() + ' ' +
 65                             obj.getHours() + ':' +
 66                             obj.getMinutes() + ':' +
 67                             obj.getSeconds() + '.' +
 68                             obj.getMilliseconds());
 69                             case '[object RegExp]':
 70                                 return arguments.callee(obj.toString());
 71                             case '[object Array]':
 72                                 var arr = [];
 73                                 for (var i in obj) {
 74                                     arr.push(arguments.callee(obj[i]));
 75                                 }
 76                                 return '[' + arr.join(',') + ']';
 77                             case '[object Object]':
 78                                 var arr = [];
 79                                 for (var i in obj) {
 80                                     arr.push(i + ':""' + arguments.callee(obj[i]).replace('%22','%5C%22') + '""');
 81                                 }
 82                                 if (arr.length === 0) {
 83                                     return '{}';
 84                                 }
 85                                 return '{' + arr.join(',') + '}';
 86                         }
 87                         break;
 88                 }
 89             }
 90             var ajaxdata = '';
 91             if (args.length > 0) {
 92                 var arr = [];
 93                 for (var i = 0; i < args.length; i++) {
 94                     arr.push(getStr(args[i]));
 95                 }
 96                 ajaxdata = 'blqw.ajaxdata=' + arr.join('\0');
 97             }
 98             url = window.location.href;
 99             var req = blqw.Ajax.GetRequest();
100             req.open('POST', url, false);
101             req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
102             var ret = req.send(ajaxdata + '&blqw.ajaxmethod=' + method);
103             if (req.status == 200) {
104                 var html = req.responseText;
105                 var data = eval('(' + html+ ')');
106                 if ('v' in data) {
107                     eval(data.v);
108                 } 
109                 if ('e' in data) {
110                     throw blqw.Ajax.Throw(data.e);
111                 } else {
112                     return data.d;
113                 }
114             } else {
115                 alert('出现错误');
116             }
117         } 
118 ";
119 
120         private static void Encode()
121         {
122             //var aaaa = new Yahoo.Yui.Compressor.JavaScriptCompressor(JAVASCRIPT, false, Encoding.UTF8, System.Globalization.CultureInfo.CurrentCulture).Compress().Replace("\"", "\"\"");
123         }
124 
125 #endif
126         #endregion
完整Js

相关文章: