国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

讓Ajax更簡單

2019-11-14 16:41:47
字體:
來源:轉載
供稿:網友

之前寫了一篇

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中

所以你可以在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中

運行方式

首先是在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 #endif126         #endregion
完整Js

release模式中注冊精簡js

1 #region javascript min2 #if !DEBUG3         const string JAVASCRIPT = @"window.blqw=window.blqw||{};blqw.Ajax=blqw.Ajax||{};blqw.Ajax.GetRequest=function(){if(window.ActiveXObject)try{return new ActiveXObject(""Msxml2.XMLHTTP"")}catch(c){return new ActiveXObject(""Microsoft.XMLHTTP"")}else if(window.XMLHttpRequest)return new XMLHttpRequest};blqw.Ajax.Throw=function(c){for(var e=function(a,b,c){this.name=""AjaxError"";this.type=c;this.message=a;this.stack=b;this.innerError=null;this.toString=function(){return'message:'+this.message+'/r/n'+'stack:'+e.stack}},a=new e(c.message,c.stack,c.type),d=a;c.innerError;)c=c.innerError,d.innerError=new e(c.message,c.stack,c.type),d=d.innerError;return a};blqw.Ajax.Exec=function(c,e){var a=function(b){if(null==b)return"""";var a;switch(typeof b){case ""number"":case ""boolean"":return b.toString();case ""string"":return encodeURIComponent(b.replace(""/0"",""/0/0""));case ""undefined"":return"""";case ""function"":try{return arguments.callee(b())}catch(c){return""""}case ""object"":switch(a=Object.prototype.toString.apply(b),a){case ""[object Date]"":return encodeURIComponent(b.getFullYear()+""-""+(b.getMonth()+1)+""-""+b.getDate()+"" ""+b.getHours()+"":""+b.getMinutes()+"":""+b.getSeconds()+"".""+b.getMilliseconds());case ""[object RegExp]"":return arguments.callee(b.toString());case ""[object Array]"":a=[];for(var d in b)a.push(arguments.callee(b[d]));return""[""+a.join("","")+""]"";case ""[object Object]"":a=[];for(d in b)a.push(d+':""'+arguments.callee(b[d]).replace(""%22"",""%5C%22"")+'""');return 0===a.length?""{}"":""{""+a.join("","")+""}""}}},d="""";if(0<e.length){for(var d=[],f=0;f<e.length;f++)d.push(a(e[f]));d=""blqw.ajaxdata=""+d.join(""/x00"")}url=window.location.href;a=blqw.Ajax.GetRequest();a.open(""POST"",url,!1);a.setRequestHeader(""Content-Type"",""application/x-www-form-urlencoded; charset=utf-8"");a.send(d+""&blqw.ajaxmethod=""+c);if(200==a.status){a=eval(""(""+a.responseText+"")"");""v""in a&&eval(a.v);if(""e""in a)throw blqw.Ajax.Throw(a.e);return a.d}alert(""出現錯誤"")};";4 #endif5         #endregion
精簡js

接下來,會反射被標識為AjaxMethod的方法,再加入到頁面的js中,比如這樣

function PostAjax1(){return blqw.Ajax.Exec('PostAjax1',arguments);}

然后就可以在js中上直接使用 PostAjax1()調用后臺的方法了

執行blqw.Ajax.Exec()方法會使用ajax方式請求當前頁面,添加post參數,比如

blqw.ajaxdata:{Name:"冰麟輕武",Age:"28",Birthday:"1986-10-29"}blqw.ajaxmethod:PostAjax7

這時候又會進入blqw.Ajax2.Register方法,會判斷blqw.ajaxmethod 如果存在這個參數就會使用Literacy組件反射對應的方法,并使用json組件反序列化參數,

調用后臺方法之后再序列化參數并輸出到頁面中

如果調用后臺方法中出現異常,將會序列化異常對象(Exception)到前臺,并在js中throw出來

頁面Demo

下載

blqw.Ajax2Demo.rar

https://code.csdn.net/jy02305022/blqw-ajax2


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 始兴县| 永登县| 通山县| 漳州市| 松潘县| 谢通门县| 阜新市| 陕西省| 苏尼特左旗| 隆昌县| 吉林省| 临汾市| 茶陵县| 确山县| 景洪市| 博爱县| 通河县| 阿图什市| 乐都县| 丰城市| 澎湖县| 泰和县| 龙州县| 林甸县| 武陟县| 乳山市| 南澳县| 惠来县| 泸水县| 仲巴县| 九龙县| 新郑市| 常熟市| 大安市| 丹棱县| 涿州市| 垦利县| 儋州市| 宁武县| 铜陵市| 应城市|