ASP.NET中一种超简单的Ajax解决方案
为什么是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
事实上正式使用的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个文件
ASP.NET中一种超简单的Ajax解决方案的更多相关文章
- ASP.net中导出Excel的简单方法介绍
下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...
- ASP.NET中登录功能的简单逻辑设计
ASP.NET中登录功能的简单逻辑设计 概述 逻辑设计 ...
- ASP.NET中几种加密方法
下面就是ASP.NET中几种加密方法.加密算法有两种,也就是上面提到的MD5和SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样. MD5的全称是Message-Digest ...
- HTML页面中5种超酷的伪类选择器:hover效果
想在自己的网站中应用超酷的hover效果吗?也许你可以从如下的这些实例中获得一些灵感,如果你喜欢这些效果,也可以直接拷贝代码并应用到你的站点. 给平淡的站点带来活力 hover效果能给网页增加一些动态 ...
- <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数
说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...
- 在ASP.Net中两种利用CSS实现多界面的方法
通过使页面动态加载不同CSS实现多界面(类型于csdn的blog): 方法一: <%@page language="C#"%><%@import namespac ...
- ASP.NET中26种性能优化方法
系统类 Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类. DateTime结构 ...
- Web页面中5种超酷的Hover效果
hover 效果能给网页增加一些动态效果,并且使得站点更具有活力.原来的做法是使用javascript来实现这些动态效果,但是随着CSS3的引入和现代浏览器 的支持,我们可以用纯粹的CSS代码来实现这 ...
- JQuery在asp.net中三种ajax传值
1)通过webservice,注意去掉注释[System.Web.Script.Services.ScriptService]这行前的注释 2)通过aspx.cs文件中的静态方法 3)通过aspx文件 ...
随机推荐
- button、label、textfield、页面跳转、传值
.AppDelegate.m #import “OneViewController.h” //一打开就运行的 -(BOOL)application:(UIApplication *)applicati ...
- 《UML大战需求分析》阅读笔记5
流程分析利器三,顺序图. 顺序图描述的是一件事发生的顺序,按照时间的发展,事情的走向,其中分为角色,消息等,每个角色下面都有一条生命线,从上到下,从左到右,依次进行事件,没有事情的时候用虚线表示,而有 ...
- Linux 如何使用压缩与解压缩的方式将Windows下的zip压缩包上传到Linux系统
当我们无法使用xftp方式上传文件到Linux系统时,我们可以使用在Windows下压缩文件夹,然后到Linux系统下解压缩的方式,完成整个上传工作. 第一步:在Windows系统下,将整个文件夹压缩 ...
- oracle方案是什么?
某用户拥有的所有的数据库对象的逻辑集合,就叫方案:方案在名称上和用户名是相同的. 比如有一个Oracle"用户"叫scott,那么一般称Scott用户所拥有的所有数据库对象的集合叫 ...
- Sublime无法使用package control安装插件
我之前想通过安装sftp,但是出现了这个问题,百度了很久才解决.东西也是从网上找的,现总结下: 网上说什么安装个新的,我也是简直醉了,其实新的并不好使. 但是,我们最好安装个新的,再继续下面的操作 ...
- Linux Memcache 安装配置
mkdir /soft cd /soft wget http://memcached.org/files/memcached-1.4.29.tar.gz tar -zxvf memcached-.ta ...
- Spring 学习笔记 8. 尚硅谷_佟刚_Spring_使用外部属性文件
1,配置数据源 (1)添加驱动 (2)编写spring配置文件 <bean id="dataSource" class="org.springframework.j ...
- VS2010 网页错误
VS2010向导添加消息处理时,弹出以上错误,原因之一为: 类内没有定义IDD的宏
- 关于原生JS获取类相关的代码
<script> var FungetElementsByClassName = function(str,root,tag){ if(root){ root = typeof root ...
- linux bash中too many arguments问题的解决方法
今天在编写shell脚本时,在if条件后跟的是[ $pid ],执行脚本的时候报 然后我输入改为[[$pid]]后,再执行脚本,就成功了,代码如下: #!/bin/bash pid=`ps -ef|g ...