Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 608|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-26 06:09:10 | 显示全部楼层 |阅读模式

    为什么是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));
    
                                    return arr.join(',');
    
                                case '[object Object]':
    
                                    return '[object Object]';
    
                            }
    
                            break;
    
                    }
    
                }
    
                var arr = [];
    
                for (var i = 0; i < args.length; i++) {
    
                    arr.push(getStr(args));
    
                }
    
    
    
                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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 21:18 , Processed in 0.060135 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表