為什么是Ajax2?
因為之前有一個blqw.Ajax,並且已經在項目中投入使用了,但是沒有這個方便,這個是后來才弄的,為了紀念第一版的blqw.Ajax,所以這個就2了...
話說看了評論才發現,原來之前有組件已經實現類似的功能了
不過我不是很理解的是AjaxPro為什么一定要配置Handler,直接在后端文件中完成不好嗎?這樣看,似乎我這個也還是有點自己的特色的...
調用方式
blqw.Ajax2調用方式
都說了是超簡單的,所以調用起來就一定是超簡單的了.....
建立一個web項目
引用blqw.Ajax2
對了,聰明你的一定已經知道了,我只是向頁面中注入了一段js,利用了一個同步ajax請求模擬出的這樣一個效果而已
技術上實現並不難

window.blqw = window.blqw || {}; blqw.Ajax = blqw.Ajax || {}; blqw.Ajax.GetRequest = function () { if (window.ActiveXObject) { try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { return new ActiveXObject('Microsoft.XMLHTTP'); } } else if (window.XMLHttpRequest) { return new XMLHttpRequest(); } } blqw.Ajax.Throw = function(e){{ function AjaxError(message,stack,type){{ this.name = 'AjaxError'; this.type = type; this.message = message; this.stack = stack; this.innerError = null; this.toString = function () {{ return 'ajaxerr:' + this.message; }}; }}; var err = new AjaxError(e.message,e.stack,e.type); var e1 = err; while(e.innerError){{ e = e.innerError; e1.innerError = new AjaxError(e.message,e.stack,e.type); e1 = e1.innerError; }} return err; }} blqw.Ajax.Exec = function (method, args) { var getStr = function (obj) { if (obj == null) return ''; var type = typeof (obj); switch (type) { case 'number': case 'boolean': return obj.toString(); case 'string': return encodeURIComponent(obj.replace('\0', '\0\0')); case 'undefined': return 'undefined'; case 'function': try { return arguments.callee(obj()); } catch (e) { return 'null'; } case 'object': type = Object.prototype.toString.apply(obj); switch (type) { case '[object Date]': return encodeURIComponent(obj.getFullYear() + '-' + (obj.getMonth() + 1) + '-' + obj.getDate() + ' ' + obj.getHours() + ':' + obj.getMinutes() + ':' + obj.getSeconds() + '.' + obj.getMilliseconds()); case '[object RegExp]': return encodeURIComponent(obj.toString().replace('\0', '\0\0')); case '[object Array]': var arr = []; for (var i in obj) arr.push(arguments.callee(obj[i])); return arr.join(','); case '[object Object]': return '[object Object]'; } break; } } var arr = []; for (var i = 0; i < args.length; i++) { arr.push(getStr(args[i])); } url = window.location.href; var req = blqw.Ajax.GetRequest(); req.open('POST', url, false); req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8'); var ret = req.send('blqw.ajaxdata=' + arr.join('\0') + '&blqw.ajaxmethod=' + method); if (req.status == 200) { var html = req.responseText; var data = eval('(' + html+ ')'); if ('v' in data) { eval(data.v); } if ('e' in data) { throw blqw.Ajax.Throw(data.e); } else { return data.d; } } else { alert('出現錯誤'); } } window.GetString=function(){return blqw.Ajax.Exec('GetString',arguments);}
事實上正式使用的js是壓縮了的
特點
當然,如果只有這樣,你們一定就罵我的......
我為他增加了一些實用的方法
1.沒有form也可以
如果頁面中沒有form,只要把<% blqw.Ajax2.Register(this); %>寫在aspx頁面中就可以了
2.返回類型object
3.異常處理
4.方便的js寫入
寫入alert
寫入變量 或 修改變量
寫入js
缺陷
- 參數僅支持System下的基礎類型
- Ajax請求中無法取消
- 不支持ref out params 這些東西....
- 安全性不夠,需要自己在代碼中實現(關於這點我自己也一直在糾結,如果園友們有好的方案可以提點一下我啊)
Demo下載
源碼下載
https://code.csdn.net/jy02305022/blqw-ajax2
事實上他只有2個文件