最轻量,最简单的Ajax框架!你会说Ajax如此简单!

最轻量,最简单的Ajax框架!

[ Houfeng.Web.Ajax ]

简介: Houfeng.Web.Ajax是一个轻量级的Ajax框架(不知能不能称为框架),但确实能让你轻松完成Ajax。。

如何使用:

1.修改页基类

public  partial  class  Test1  :  Houfeng.Web.Ajax.BasePage {...   }

2.假如页面有一个方法Hello 它有一个参数 string  woh

public  string  Hello(string  who)
{
              return  "Hello!"+who;
}

 

3.在页面加载事件中注册实例及方法。

protected    void    Page_Load(object    sender,    EventArgs    e)  
{  
                this.RegInstance(this);   //这里将页面自个注册了。。
                this.RegFunction("Hello",    1);   //注册已注册实例的方法。
}  

4.在客户端调用服务端方法

function  test()
{
            alert(Hello("曹操"));
}

如果页面有一个按钮的click为test(),那么便会弹出 ”Hello!曹操“;

5.如何异步调用?

function  test()
{
            Hello("曹操",test1);
}
function  test1(x)
{
            alert(x);
}

页面按钮的click还是test(),那么又会弹出 ”Hello!曹操“; 不过这下是回调text1 弹出来的。

使用请保留作者版权

请遵守 LGPL英文 LGPL中文 协议:  下载.

  

 

 

 

 

 

 

 

 

 

 

 

 

 

作者:houfeng
出处:http://houfeng.cnblogs.com
本文版权归作者和博客园共有,未经作者同意请保留此声明.
posted @ 2009-12-29 19:14 Houfeng 阅读(3177) 评论(22) 编辑 收藏

 回复 引用 查看   
#1楼 2009-12-29 19:31 codingsilence      
你这个有点类似AjaxPro,他那个比你这个还要好用,而且前台调用的方法是通过属性标注之后就可以访问,比你这个还方便!
 回复 引用 查看   
#2楼 2009-12-29 20:31 张明海      
还是支持原创
 回复 引用 查看   
#3楼 2009-12-29 20:47 双击      
支持自己造轮子
虽然AjaxPro可以更好用,但是自己实现一下可以学很多

 回复 引用 查看   
#4楼 2009-12-29 21:27 行走在人间      
2.假如页面有一个方法Hello 它有一个参数 string woh

打错字了

 回复 引用 查看   
#5楼 2009-12-29 23:10 fishkuro      
孟德,我是元让啊!
 回复 引用 查看   
#6楼 2009-12-30 09:06 NickLemon      
顶一下
 回复 引用 查看   
#7楼[楼主] 2009-12-30 09:17 侯锋      
@codingsilence
这个支持不仅支持将页面方法公开给客户端,只要注册相应类实例,还可把其它的类的方法给客户端用。

 回复 引用 查看   
#8楼 2009-12-30 09:18 lola      
类似ajaxpro
 回复 引用 查看   
#9楼 2009-12-30 09:49 黑咖啡      
不知楼主有木有用过XCallback
她同样简单,还可以将服务器控制处理后输出到前台

 回复 引用 查看   
#10楼[楼主] 2009-12-30 09:53 侯锋      
@黑咖啡
XCallback
没用过

 回复 引用 查看   
#11楼 2009-12-30 10:25 黑咖啡      
XCallback 1.x是用一个dll封装的,
如果我在页面加载一个Repeater
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate><table><tr><th>序号</th><th>值</th></tr></HeaderTemplate>
<ItemTemplate><tr><td><%#Eval("id") %></td><td><%#Eval("val") %></td></tr></ItemTemplate>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>
在用Ajax分页时,后台直接
public string getGridViewData()
{
Repeater1.DataSource = DataAccess.GetDataSet("select * from demo1");
Repeater1.DataBind();
return XCallback.GetHtml(GridView1);
}

public static string GetHtml(System.Web.UI.Control control)
{
System.Text.StringBuilder builder = new System.Text.StringBuilder();
System.IO.StringWriter writer = new System.IO.StringWriter(builder);
System.Web.UI.HtmlTextWriter HtmlWriter = new System.Web.UI.HtmlTextWriter(writer);
control.RenderControl(HtmlWriter);
return builder.ToString();
}
这样我们就得到了,格式化好的table
<table><tr><th>序号</th><th>值</th></tr>
<tr><td>1</td><td>sdfs</td></tr>
<tr><td>2</td><td>sdfsd</td></tr>
<tr><td>3</td><td>sdfwer</td></tr>
<tr><td>4</td><td>dfwer</td></tr>
</table>
这样就不用我们在前台用js生成table

XCallback 2.x 只有是一个js文件,我还没有研究过
如果你有兴趣,我可以发给你

 回复 引用 查看   
#12楼 2009-12-30 12:49 chenxumi      
@黑咖啡
哈哈 不够意思 用我的产品 也不再我页面上留个言 :) xcallback.1说实在的 我不推荐使用 他有几个硬伤:
1、 继承基类 这个会吓跑一群人
2、 客户端调用服务器方法用了发射机制,性能暂且不说,将来涉及到复杂的页面变量引用将变的很不流畅而且很不自然
3、 ajax调用不太精简,而且并未达到完善的地步

所以针对以上一些文题7月份又做了一个 建议你看看这个xcallback.2 要完备很多

 回复 引用 查看   
#13楼 2009-12-30 12:50 chenxumi      
@黑咖啡
哦 原来你已经用上2.0了 这个在ajax支持上 已经很完备了

 回复 引用 查看   
#14楼 2009-12-30 12:52 chenxumi      
@侯锋
以前也做过一个类似的版本 但是觉得不好 所以很是走了 Jquery的路线 纯js的ajax

 回复 引用 查看   
#15楼[楼主] 2009-12-30 13:22 侯锋      
引用chenxumi:
@侯锋
以前也做过一个类似的版本 但是觉得不好 所以很是走了 Jquery的路线 纯js的ajax

正考虑做一个不须继承基类的版本。

 回复 引用 查看   
#16楼[楼主] 2009-12-30 13:34 侯锋      
引用chenxumi:
@侯锋
以前也做过一个类似的版本 但是觉得不好 所以很是走了 Jquery的路线 纯js的ajax

我看了你写博文,和我这个还是有很多不同的。
我这个是只有显示注册的方法客户端才能用,调用比xcallback.1 更直接。

 回复 引用 查看   
#17楼 2009-12-30 14:44 黑咖啡      
我认为XCallback 1.x的返回服务器控件的htmlcode的功能是个重点一定要有,不然返回一个表格还要用前台的js来生成,就不如用jquery了。

jquery、AjaxPro等框架最大的麻烦的就是在返回表格、TreeView、DropDownList、...等东东,要繁琐的用js在前台作大量处理。

这样

一方面要求开发人员要较高的js的水平
一方面增大了js因浏览器兼容被错的可能
另一方面会让开发变得繁琐。例如我用Repeater做一个文章列表,有隔行不同色效果、每行的删除按钮有confirm咨询等效果。文章在Ajax时jquery返回json,我们在生成这个表的时候就太麻烦了

 回复 引用 查看   
#18楼 2009-12-30 14:58 黑咖啡      
我没有比较Houfeng.Web.Ajax和XCallback的意思,这两种方案都很简单。

只是认为
XCallback(1.x)的输出服务器控件 HtmlCode的功能很好,Houfeng.Web.Ajax的js简单易懂。(XCallback的js中的return;我一直不懂,总想不通return;之后的的代码还可以执行。我的js比较菜^_^)

希望这两种ajax框架可以取长补短

 回复 引用 查看   
#19楼 2009-12-31 11:31 黑白花猫      
支持!!!
希望能出个不用继承基类的版本

 回复 引用 查看   
#20楼 2009-12-31 12:45 chenxumi      
@黑咖啡

呵呵 你误会了 开玩笑而已
return 只是个切割过程 返回前和返回后通过return有效的隔离开来
这个原理是通过arguments.caller()可以获得这个调用的父方法,这也是为什么xcallback.2不支持顶级调用的原因(例如window调用),从父方法得到要执行的服务器端返回代码,最后通过eval执行。

用这种机制在我看来的确很创新,这也是相比JQ把回调函数写在匿名函数里更简单的地方 其实你现在看的是xcallback的第二个版本 在第一个版本里实现的基本原理和楼主类似 但是大家的反应并不好 所以才有了2.0的版本

关于楼主这个我也有个建议的地方,没必要再page_load里
注册方法,试想如果要调用的服务器方法很多,那不是要注册很多,框架是的目标是减小复杂度和精简代码,这似乎有悖这个宗旨,你这个还可以简化 直接在page_load里写这个RegInstance(this)就行了,要调用的方法在客户端指定,通过反射遍历this就可以索引到要调用的方法


 回复 引用 查看   
#21楼[楼主] 2009-12-31 14:38 侯锋      
@chenxumi
引用chenxumi:
@黑咖啡

呵呵 你误会了 开玩笑而已
return 只是个切割过程 返回前和返回后通过return有效的隔离开来
这个原理是通过arguments.caller()可以获得这个调用的父方法,这也是为什么xcallback.2不支持顶级调用的原因(例如window调用),从父方法得到要执行的服务器端返回代码,最后通过eval执行。

用这种机制在我看来的确很创新,这也是相比JQ把回调函数写在匿名函数里更简单的地方 其实你现在看的是xcallback的第二个版本 在第一个版本里实现的基本原理和楼主类似 但是大家的反应并不好 所以才有了2.0的版本

关于楼主这个我也有个建议的地方,没必要再page_load里
注册方法,试想如果要调用的服务器方法很多,那不是要注册很多,框架是的目标是减小复杂度和精简代码,这似乎有悖这个宗旨,你这个还可以简化 直接在page_load里写这个RegInstance(this)就行了,要调用的方法在客户端指定,通过反射遍历this就可以索引到要调用的方法



我看加一个方法 RegAllFunction 这个法实现注册所有方法更好点。有时候不需要向客户端公开所有方法。

 回复 引用 查看   
#22楼 2010-01-07 15:56 YJJ      
博主的头像比较风骚
帅气~!