Ajax 应该不是一项技术,是一种思想而已,跟 ASP.NET 以及其它 Web 开发语言没有什么太大关系,这里只是谈谈 ASP.NET 中目前使用的 Ajax 技术以及其它一些实现 Ajax 的优秀框架。

Ajax 已经很流行一阵子了,现在谈 Ajax 觉得有点老土,-_____-```。目前所谓的 Web2.0 网站,基本上没有不使用 Ajax 的,就如使用 RSS 一样,就如同一个标签,贴上去就成了 2.0。Ajax 具体细节不谈,其目的就是让用户触发一些操作的时候,页面不会全部刷新,只刷新待更新的“部分页面”,加载数据的过程中,用 Loading 的图片来表示正在加载数据,不只是看起来挺不错,也提高了用户的访问体验,有一种酷酷的感觉。

至于 ASP.NET 中用到的 Ajax ,我想大多数人使用的是 Ajax.net / AjaxProfessional 或者 ASP.NET 2.0 中带有的 Atlas 框架。因为都用过,我感觉这些都不是很好的 Ajax 解决方案。

AjaxPro 用起来不是很方便,页面需要在 Page_Load 里面注册,类似于

private void Page_Load(object sender, System.EventArgs e)
{
   AjaxPro.Utility.RegisterTypeForAjax(
typeof(DataAccess.MyAjax));
}

而且 ASPX 页面要包含一个 Runat=Server 的<Asp:From> 标记,这样 Ajax.net 会将用到的一些通用函数以及你自定义的函数加载进来,如果没有 <Asp:From> 其实也可以,手动添加就可以了。但是,在我以前做过的应用中,时常出现的一些问题,比如,经常发现浏览器状态栏会有 js 脚本错误,而此时你所做的 Ajax 效果会全部失效,解决办法就是,把那个 Ajax.dll /AjaxPro.dll 给重新覆盖一下就可以了,问题的原因究竟是什么,目前还不知道。

至于 Atlas,我对它的感觉其实就跟对 DataGrid 的感觉一样,嗯,这种控件的好用是好用,很方便,但是,真正做一些 Web 应用的时候,你不得不考虑到性能以及分层等各种问题。我想,在比较正式的 Web 应用中,没几个人去用 DataGrid 去显示一些数据吧,建议大家尽量少用这些控件。另外就是,Atlas 的执行效率确实不够理想,一直在那里 Loading,等了好长时间,竟然出现什么脚本错误,汗。

那还有没有其它解决方案吗?你可以自己写些 Javascript 函数去实现。不过,我这里推荐用 jQuery 这个 Javascript 框架,从百度百科引用一段对其的介绍:

jQuery 是继 prototype 之后又一个优秀的 Javascrīpt 框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。
它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的,它兼容 CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。
jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理 HTML documents、events、实现动画效果,并且方便地为网站提供 AJAX 交互。
jQuery 还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。
jQuery 能够使用户的 html 页保持代码和 html 内容分离,也就是说,不用再在 html 里面插入一堆js来调用命令了,只需定义 id 即可。

看来这段介绍你会知道,Ajax 效果只是 jQuery 的众多功能的一种,一般来说,Web 应用中使用 Ajax,必然也离不开 Javascript,而 jQuery 正是为大家封装了一些 JS 函数,使得你不在被 JS 的纷繁复杂所担心,一切由 jQuery 帮你实现。

看一个小例子,就知道用 jQuery 做 Ajax 实在是太方便了。

比如某个 ASPX 或者 HTML 页面里面有个 Button,点击触发 Ajax 加载数据,显示到 <SPAN ID=News> 里面。点击那个 Button 触发一个 JS 函数即可:

function GetNews()
{
            $("#News").html("Loading News......");
            $.ajax({
                type:
"post"
,
                url:
"/ajax.aspx?act=getnews"
,
                dataType:
"html"
,
                data:
""
,
                success:
function
(result)
                {
                    $(
"#News"
).html(result);
                }
                });

}

这个函数就会先在那个 SPAN 里面显示“Loading News....”,通过异步调用,访问 /Ajax.aspx 这个页面,通过传递的 URL 参数 act=News 告诉页面需要什么类型的数据,你可以根据不同的参数,将数据通过 Ajax.aspx 直接 Write 到页面上,然后返回给上述 JS 函数,呈现到页面上,就这样简单搞定!

当然,jQuery 里面并不是只有这一种 Ajax 效果实现方式,这里给出一些 jQuery 的资源,花上几个小时的时间学一下,很值得:

jQuery 官网:http://jquery.com/
jQuery 中文 API 文档: http://jquery.org.cn/visual/cn/index.xml 
jQeury 中文入门教程: http://www.k99k.com/jQuery_getting_started.html

至于其它的 Javascript 优秀框架有很多了,比如 Yahoo! User Interface Library,Prototype,Rico,Qooxdoo,Dojo 等,另外还有 Ajax 方面一些资源可以参考一下这里收集的资源。
posted on 2007-11-19 23:10 cacard 阅读(3803) 评论(19) 编辑 收藏

FeedBack:
2007-11-19 23:14 | Phinecos(洞庭散人)      
hehe,I have only used DWR some days before
 回复 引用 查看   
2007-11-19 23:22 | volnet(可以叫我大V)      
虽然对JavaScript不熟悉~
 回复 引用 查看   
2007-11-20 00:39 | stonezhu      
jQuery 确实不错,他的很多的插件也很强大了.感觉现在比prototype做的好.(以前用prototype)
 回复 引用 查看   
2007-11-20 08:02 | Jeffery Huang      
感谢楼主的介绍,前几天整看过jQuery,但是没有仔细研究,看来有空了要好好研究一下了,呵呵
 回复 引用 查看   
2007-11-20 09:00 | Jeffrey Zhao      
asp.net ajax绝对是可以用的,它提供的是基础ajax功能,不是像GridView那样的“实现”。而且关键在于它是和asp.net集成的,易用性上不是纯客户端框架可以比拟的。所以评价一个解决方案是不是好,要看使用环境。
// 而且jquery它也不是解决方案……

 回复 引用 查看   
2007-11-20 09:11 | nayear[未注册用户]
看到结尾,原来是想说jQuery,哈哈,不错...

能说说为什么:在比较正式的 Web 应用中,没几个人去用 DataGrid 去显示一些数据吧,建议大家尽量少用这些控件

 回复 引用   
2007-11-20 09:27 | beyondjay      
Good!
 回复 引用 查看   
2007-11-20 09:52 | Clark Zheng      
同意老赵的意见,有体验才有发言权
 回复 引用 查看   
2007-11-20 09:59 | Enzo      
--引用--------------------------------------------------
Jeffrey Zhao: asp.net ajax绝对是可以用的,它提供的是基础ajax功能,不是像GridView那样的“实现”。而且关键在于它是和asp.net集成的,易用性上不是纯客户端框架可以比拟的。所以评价一个解决方案是不是好,要看使用环境。
--------------------------------------------------------
而且jquery没用过,所以也不知道如何,不过估计轻量级运用应该不错,复杂一点个人确实觉得asp.net ajax比较适用

 回复 引用 查看   
2007-11-20 12:08 | Jeffrey Zhao      
@Enzo
还是要看做什么……我也不是说asp.net ajax就是一定好了,我在产品环境上用的时候也是对它进行一定程度上的修改的,呵呵……

 回复 引用 查看   
#11楼[楼主]
2007-11-20 12:28 | 卡卡 ^ cacard      
@nayear
DataGrid 封装了一些细节,变得很好用,但却忽略了一些重要的东西,比如性能等,里面的分页功能的实现对于呈现大量数据记录是很不好的,必须做一下修改,或者完全不要用 DataGrid,用 Repeater 要好一些。

 回复 引用 查看   
2007-11-20 15:44 | longer[未注册用户]
楼主完全没用过asp.net ajax的客户端应用吧,写那个脚本简直是一种享受
 回复 引用   
2007-11-20 15:46 | longer[未注册用户]
你似乎只去体验了一把UpatePanel,就忘断结论了.精彩的东西在ma.js
 回复 引用   
2007-11-20 21:06 | 無尽海      
在csdn上看到一篇
说ajax只是过渡技术命不久以,
个人感觉寿命应该挺长

 回复 引用 查看   
2007-11-20 21:50 | Jeffrey Zhao      
@longer
享受在VS 2008里。

 回复 引用 查看   
2007-11-20 22:21 | 胡一刀      
怎么感觉像打广告
 回复 引用 查看   
2007-11-21 13:43 | blackpuppy[未注册用户]
假如用ASP.NET 2.0, 就应该用GridView了,已经代替DataGrid了。而且正式的网络应用,列表示少不了的,怎么可能不用GridView或者DataGrid呢。
 回复 引用   
2007-12-17 12:04 | 睿枫      
我也正想用ASP.net+jQuery做应用。asp.net ajax了解过一下,因为只涉及一些少量AJAX,用它感觉是杀鸡牛刀
 回复 引用 查看   
2008-01-08 16:47 | Haibin[未注册用户]
jQuery确实不错,asp.net ajax也不错,说真的,看你用到什么程度,能发挥出某一个的最大优势,避开其不足的地方,这才最重要
 回复 引用