zoukankan      html  css  js  c++  java
  • AjaxPro客户端框架总结

        由于微软构建asp.net 2.0时对ajax技术的不重视,在04、05年ajax风起云涌之时,在asp.net出现了AjaxPro这个Ajax框架,虽然随着asp.net ajax的发布,AjaxPro被强大的asp.net ajax的光芒覆盖,但AjaxPro的简单易用性方面还是非常不错的。

        AjaxPro在客户端会输出三个Core.ashx、Converter.ashx和Prototype.ashx三个文件,其实就是javasript文件。其中Prototype.js对Object建立了extend,然后在extend上增加了Apply和Bin方法,之后的Ajax调用的核心文件Core.ashx就是基于extend上进行的。Prototype.js里对Array,String进行扩展并增加了2个事件方面的方法addEvent与removeEvent方法。

        Array对象扩展:

            push: function(o) {
    		this[this.length] = o;
    	},
    	addRange: function(items) {
    		if(items.length > 0) {
    			for(var i=0; i<items.length; i++) {
    				this.push(items[i]);
    			}
    		}
    	},
    	clear: function() {
    		this.length = 0;
    		return this;
    	},
    	shift: function() {
    		if(this.length == 0) { return null; }
    		var o = this[0];
    		for(var i=0; i<this.length-1; i++) {
    			this[i] = this[i + 1];
    		}
    		this.length--;
    		return o;
    	}

        String对象的扩展:

            trimLeft: function() {
    		return this.replace(/^\s*/,"");
    	},
    	trimRight: function() {
    		return this.replace(/\s*$/,"");
    	},
    	trim: function() {
    		return this.trimRight().trimLeft();
    	},
    	endsWith: function(s) {
    		if(this.length == 0 || this.length < s.length) { return false; }
    		return (this.substr(this.length - s.length) == s);
    	},
    	startsWith: function(s) {
    		if(this.length == 0 || this.length < s.length) { return false; }
    		return (this.substr(0, s.length) == s);
    	},
    	split: function(c) {
    		var a = [];
    		if(this.length == 0) return a;
    		var p = 0;
    		for(var i=0; i<this.length; i++) {
    			if(this.charAt(i) == c) {
    				a.push(this.substring(p, i));
    				p = ++i;
    			}
    		}
    		a.push(s.substr(p));
    		return a;
    	}

        String对象还增加了2个静态方法:

            format: function(s) {
    		for(var i=1; i<arguments.length; i++) {
    			s = s.replace("{" + (i -1) + "}", arguments[i]);
    		}
    		return s;
    	},
    	isNullOrEmpty: function(s) {
    		if(s == null || s.length == 0) {
    			return true;
    		}
    		return false;
    	}
    

        可以看到扩展的方法都是C#风格的,使得在javasript中能如C#中一样进行字符串与数组操作。 更重要的是Converter.js中增加了DataTable、DataSet、Dictionary和NameValueCollection,使得我们可以在客户端组装以上对象并在需要的时候发往服务端。可以想象在服务端的ajax方法接受一个DataTable类型的参数,那是如何的愉快。

    一、DataTable

        客户端代码:

            function SendDataTable() {
                var dataTable = new Ajax.Web.DataTable();
                dataTable.addColumn("id", "System.Int32");
                dataTable.addColumn("name", "System.String");
                var row = new Object();
                row.id = "001";
                row.name = "xiaopang";
                dataTable.addRow(row);
                var ret = ZyYz_Default.HanderDataTable(dataTable);
                alert(ret.value);
            }

        服务端代码:

            [AjaxPro.AjaxMethod]
            public int HanderDataTable(DataTable dataTable)
            {
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    //do somethig...
                }
                return 1;
            }

    二、DataSet(基本同DataTable,只是类型为Ajax.Web.DataSet)

    三、Dictionary:

        客户端代码:

            function SendDictionary() {
                var dictionary = new Ajax.Web.Dictionary("Dictionary", [["004", "xiaopang"], ["005", "xiaopang005"]]); dictionary.add("006", "xiaopang006"); alert("是否存在005元素:" + dictionary.containsKey("005") + "值为:" + dictionary.getValue("005")); var ret = ZyYz_Default.HandDictionary(dictionary).value; alert("Dictionary元素数目:" + ret); }

    服务端代码:

            [AjaxPro.AjaxMethod]
            public int HandDictionary(Dictionary<string, string> dictionary)
            {
                return dictionary.Count;
            }

    四、关于直接传递Class

    
    

        服务端代码:

            public class TestClass
            {
                public int Id{ get; set; }
                public string Name { get; set; }
            }
        
            [AjaxPro.AjaxMethod]
            public TestClass GetTestClass()
            {
                return new TestClass{ Id =002,Name="oldXiaoPang"};
            }
     
            [AjaxPro.AjaxMethod]
            public TestClass PutTestClass(TestClass testClass)
            {
                testClass.Id = 003;
                return testClass;
            }

        客户端代码:

            function GetTestClass() {
                var testClass = ZyYz_Default.GetTestClass().value;
                testClass.Name = "newName";
                var newTestClass = ZyYz_Default.PutTestClass(testClass).value;
                alert("原Id为:" + testClass.Id + " 现Id为:" + newTestClass.Id);
                alert(" 现Name为:" + newTestClass.Name);
            }

        关于core.js的ajax核心方法还没有仔细看。

  • 相关阅读:
    python,生产环境安装
    neo4j 图数据库
    RNN系列
    机器学习关于AUC的理解整理
    fensorflow 安装报错 DEPENDENCY ERROR
    dubbo Failed to check the status of the service com.user.service.UserService. No provider available for the service
    使用hbase遇到的问题
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
    gradle 安装
    jenkins 安装遇到的坑
  • 原文地址:https://www.cnblogs.com/xiaopang2010/p/1783349.html
Copyright © 2011-2022 走看看