为什么是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

  缺陷

  1. 参数仅支持System下的基础类型
  2. Ajax请求中无法取消
  3. 不支持ref out params 这些东西....
  4. 安全性不够,需要自己在代码中实现(关于这点我自己也一直在纠结,如果园友们有好的方案可以提点一下我啊)

  Demo下载

blqw.Ajax2Demo.rar

  源码下载

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

事实上他只有2个文件

Ajax2.cs

AjaxMethod.cs

ASP.NET中一种超简单的Ajax解决方案的更多相关文章

  1. ASP.net中导出Excel的简单方法介绍

    下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...

  2. ASP.NET中登录功能的简单逻辑设计

     ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计             ...

  3. ASP.NET中几种加密方法

    下面就是ASP.NET中几种加密方法.加密算法有两种,也就是上面提到的MD5和SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样. MD5的全称是Message-Digest ...

  4. HTML页面中5种超酷的伪类选择器:hover效果

    想在自己的网站中应用超酷的hover效果吗?也许你可以从如下的这些实例中获得一些灵感,如果你喜欢这些效果,也可以直接拷贝代码并应用到你的站点. 给平淡的站点带来活力 hover效果能给网页增加一些动态 ...

  5. <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数

    说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...

  6. 在ASP.Net中两种利用CSS实现多界面的方法

    通过使页面动态加载不同CSS实现多界面(类型于csdn的blog): 方法一: <%@page language="C#"%><%@import namespac ...

  7. ASP.NET中26种性能优化方法

    系统类  Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类. DateTime结构 ...

  8. Web页面中5种超酷的Hover效果

    hover 效果能给网页增加一些动态效果,并且使得站点更具有活力.原来的做法是使用javascript来实现这些动态效果,但是随着CSS3的引入和现代浏览器 的支持,我们可以用纯粹的CSS代码来实现这 ...

  9. JQuery在asp.net中三种ajax传值

    1)通过webservice,注意去掉注释[System.Web.Script.Services.ScriptService]这行前的注释 2)通过aspx.cs文件中的静态方法 3)通过aspx文件 ...

随机推荐

  1. JS-身份证号获取出生日期、性别、年龄

    var cardId=$("#cardId").val();//先获取身份证号(据自己实际写法获取) 1.获取出生日期: function getBirth(cardId){ va ...

  2. UIAlertController、UIAlertAction 警告框

      NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertAction : NSObject <NSCopying> //创建操作 + (instan ...

  3. Android开发中 Eclipse常忘记又需要的快捷键

    Android Eclipse用的不太熟,常忘记又需要的快捷键 shift+ctrl+o导入所有没导入的包 shift+ctrl+m导入你鼠标当前所在的地方的未导入的包 Eclipse中有如下一些和运 ...

  4. dp px 转换工具

    public class DensityUtil { private final static String TAG = "DensityUtil"; private static ...

  5. 向MySql数据库导入excel表数据

    最近要开发一个小的答题系统,如果题目人工录入那确实很麻烦.所以想到是不是可以从用一些现有数据格式的文件导入数据.在网上查了一下,看到有关于将excel的数据导入到mysql的方法.所以将题库数据整理成 ...

  6. linux下rm -r误删NTFS文件恢复方法

    一时疏忽,手一抖,把整个挂载的F盘删了一半!顿时傻眼!! 被删的F盘是Windows下NTFS分区,在Ubuntu12.04中挂载了F盘,使用rm命令时粗心大意,误删了一半的数据. 血的教训告诉我们, ...

  7. html或者jsp页面引用jar包中的js文件

    一,页面上引用jar包中的js文件的方法 使用java web框架AppFuse的时候发现,jquery.bootstrap等js框架都封装到jar包里面了.这些js文件通过一个wro4j的工具对其进 ...

  8. HDU 1010 Tempter of the Bone

    题意:从开始位置走到结束位置,恰好走 t 步 YES 否则 NO 搜索题,由于是恰好走到,所以用到了奇偶剪枝 什么是奇偶剪枝,我也是刚知道 所给步数为 t ,起始位置坐标 (begin_x,begin ...

  9. 【随记】Hello World小记

    今天装Python,如下: 突然想到,到现在,我已经数不清写过多少遍Hello World了. 最早是初一学VB的时候,用Label1在Form1上画一个,然后修改Caption属性为“Hello W ...

  10. [置顶]PADS PCB功能使用技巧系列之NO.004- 如何做到20H规则?

    电源层与地层之间变化的电场在板边缘会向外辐射电磁干扰(EMI),称为边沿效应.20H规则可将70%的电场限制在接地层边沿内,100H可达到98%. (1)在Layout中,选择菜单栏Setup -&g ...