ASP.NET AJAX客户端编程之旅(七)——剩下的问题(完结篇)

转载 2012年02月01日 00:54:53

======================================================
注:本文源代码点此下载
======================================================

asp.net ajax客户端编程之旅(七)——剩下的问题(完结篇)

2008-09-23 11:18

by

t2噬菌体,

3345

visits,

收藏,

编辑

摘要

通过前面几篇文章,相信大家对asp.net ajax框架的客户端编程已经有了一定了解。并且通过一个完整的控件开发,对这个框架有了整体的了解。这篇文章作为本系列的完结篇,将讨论几个比较琐碎但是与开发息息相关的问题。

关于loading...

相信做ajax应用的朋友没有不使用loading的,不然网络延迟会让用户体验非常差,而且用户会不知道系统正在工作。那么当使用asp.net ajax客户端编程时,怎么做loading呢?

我们先来分析一下loading应该什么时候显示,什么时候终止。一个典型的异步交互过程如下:

1.用户发出请求

2.网络延迟

3.服务器端处理

4.服务器返回数据

5.网络延迟

6.客户端呈现数据

在这个交互过程中,loading应该在第一步后出现,而在第六步结束后才消失。结合前面的知识可以知道,第一步结束的地方是事件处理函数的末尾,而第六步结束的地方是回调函数的末尾。于是,我们找到了loading开始的结束的地方。那么loading怎么实现呢?我的思路是:先在页面上放置一个span或div,里面有loading图片,但是开始时这个span或div是隐藏的。当loading开始时使其可见,而loading结束时使其重新不可见,于是就实现了loading效果。下面我们来看一个例子。

default.aspx:

1@ page language="c#" autoeventwireup="true"codefile="default.aspx.cs" inherits="_default" %>

2

3doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

4

5html xmlns="http://www.w3.org/1999/xhtml">

6head runat="server">

7title>untitled pagetitle>

8head>

9body>

10form id="form1" runat="server">

11asp:scriptmanager id="scriptmanager1" runat="server">

12scripts>

13asp:scriptreference assembly="microsoft.web.preview" name="previewscript.js" />

14asp:scriptreference path="~/ajax.js" />

15scripts>

16services>

17asp:servicereference path="~/webservice.asmx" />

18services>

19asp:scriptmanager>

20br />

21span id="loading">

22img alt="loading" src="icon/loading.gif" />

23span>

24br />

25span id="content">

26span>

27br />

28input id="submit" type="button" value="获取内容" />

29form>

30body>

31html>

webservice.asmx:

1using system;

2using system.collections;

3using system.linq;

4using system.web;

5using system.web.services;

6using system.web.services.protocols;

7using system.xml.linq;

8using system.web.script.services;

9using system.threading;

10

11/**////

12/// summary description for webservice

13///

14[webservice(namespace = "http://tempuri.org/")]

15[webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]

16[scriptservice]

17// to allow this web service to be called from script, using asp.net ajax, uncomment the following line.

18// [system.web.script.services.scriptservice]

19public class webservice : system.web.services.webservice {

20

21public webservice () {

22

23//uncomment the following line if using designed components

24//initializecomponent();

25}

26

27[webmethod]

28public string getcontent() {

29thread.sleep(5000);//延迟5秒返回数据

30return "这是获取的内容";

31}

32

33}

ajax.js:

1var lblloading;

2var lblcontent;

3var btnsubmit;

4

5sys.application.add_init(onpageinit);

6

7function onpageinit()

8{

9lblloading=new sys.preview.ui.label($get("loading"));

10lblloading.initialize();

11lblloading.set_visible(false);//使得一开始loading为隐藏

12lblcontent=new sys.preview.ui.label($get("content"));

13lblcontent.initialize();

14btnsubmit=new sys.preview.ui.button($get("submit"));

15btnsubmit.initialize();

16

17btnsubmit.add_click(btnsubmit_onclick);

18}

19

20function btnsubmit_onclick()

21{

22webservice.getcontent(onsucceeded);

23

24//此处是显示loading的代码,放在事件处理函数的最后

25lblcontent.set_visible(false);

26lblloading.set_visible(true);

27}

28

29function onsucceeded(result)

30{

31lblcontent.set_text(result);

32

33//此处是隐藏loading的代码,放在回调函数的最后

34lblloading.set_visible(false);

35lblcontent.set_visible(true);

36}

相信通过前面的文件,大多数代码已经很少熟悉了,这里只拣关键的说一下。

在webservice中,有一个“thread.sleep(5000);”,这是让返回数据时延时5秒,模拟网络延时,借此更清楚看到loading图标。而在js代码中,btnsubmint_onclick最后的两行代码是显示loading,而onsucceeded最后的两行代码是隐藏loading。

运行这个例子,就可以看到效果。

asp.net ajax还有什么功能

asp.net ajax是一个在茁长成长中的框架,其功能非常丰富,也不断有新功能增加进来。在这短短的几篇文章里,不可能把所有功能都讨论一遍。此系列文章没有涉及到但很有用的功能有很多,如拖放组件可以时我们很轻松的创建具有拖放功能的应用,如购物车、自定义布局等等,数据组件可以使我们在前台实现类似后台的数据绑定等等。

asp.net ajax可以进行底层编程吗

到目前为止,我们所做的程序都是比较“上层”的,都是直接调用了封装好的功能。那么我们有没有可能进行更底层、更细腻的操作呢?答案是肯定的。在这个框架中,有一个sys.net.webrequest组件,利用它,可以从底层进行异步调用,从而进行更细致的操作。至于具体方法请参考相关文档。

asp.net ajax可以用于其他语言或平台吗

对于这个问题,答案是完全可以。其实,asp.net ajax框架本身是纯javascript写成的,和.net平台并无依赖。而服务器端组件只不过是使得使用这些脚本更简单一点。我们使用客户端编程就是直接使用这些脚本。

既然是纯javascript的东西,当然可以应用于一切web开发平台了,只要把相应的脚本文件导入就可以了。所以,你完全可以在j2ee、php或ruby上使用asp.net ajax,甚至可以开发属于这些平台的scriptmanager。

结束语

这个系列的文章到这里就算结束了。短短七篇文章,不可能将整个asp.net ajax框架讲的很透彻,何况这个框架还在不断开发中。只是希望这个系列的文章能起到抛砖引玉的作用,为各位朋友铺平入门的道路。

本文demo在这里下载:loadingdemo.rar

书籍推荐

最后,推荐几本学习asp.net ajax比较好的参考书。

本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名张洋(包含链接),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

标签: web, ajax, .net, asp.net ajax

绿色通道:好文要顶关注我收藏该文与我联系

categories:

[02]asp.net ajax

tags:

web, ajax, .net, asp.net ajax

add your comment

20 条回复

1889408

#1楼 霍霍 2008-09-23 11:22

真讨厌写js,还不得不写,如果我只想买一本书,楼主推荐哪一本呢?

回复 引用 查看

#2楼 真见 2008-09-23 11:31

晕,,目前为止,你看得ajax书至少是我的4倍了

我只看过陈黎夫的服务端卷

回复 引用 查看

#3楼 mjx[未注册用户]2008-09-23 11:46

ajax 有什么好的,我觉得就是很垃圾的东西,现在很多程序员都论落成做网站的了,还美其名曰“软件工程师”!

回复 引用

#4楼 笨笨狼[未注册用户]2008-09-23 11:48

现在很多的用net的就是在做网站,呵呵。。。。

回复 引用

#5楼 jillean wong 2008-09-23 12:01

--引用--------------------------------------------------

mjx: ajax 有什么好的,我觉得就是很垃圾的东西,现在很多程序员都论落成做网站的了,还美其名曰“软件工程师”!

--------------------------------------------------------

精辟,但是ajax是web发展的必然趋势,无法阻挡。

回复 引用 查看

#6楼 木野狐(neil chen) 2008-09-23 12:10

@mjx

网站只是构建 ui 的一种手段而已。

难道你会认为用 winform 拖控件创建 ui 就会高级很多吗?

这样的观点太表面化了,要知道任何领域都可以做得很深。

回复 引用 查看

#7楼 笨笨狼[未注册用户]2008-09-23 12:34

@木野狐(neil chen)

你说的我也赞同,但是现在很多的所谓的程序员滥用ajax,我也觉得这个东西很垃圾,做垃圾网站的时候可以用下,ajax最烂的的地方就是安全性,可是偏偏很多it民工要把它用在bs上,靠,好像不用就觉得自己跟不上时代了,对这种it民工我真的很鄙视!

回复 引用

#8楼 justin 2008-09-23 12:54

@霍霍

听说 asp.net ajax 编程指南 还不错

回复 引用 查看

#9楼[楼主] t2噬菌体 2008-09-23 13:01

@霍霍

那我推荐《asp.net ajax 实战》

回复 引用 查看

#10楼[楼主] t2噬菌体 2008-09-23 13:02

@mjx

任何新生事物都是在曲折中前进的,不可能一开始就尽善尽美,而且总会遭到批评。但是新事物必将取代旧事物。

回复 引用 查看

#11楼 mjx[未注册用户]2008-09-23 13:09

@t2噬菌体

ajax不是新生事物好吧?他是很久以前的东西了,我叫你一声哥了!

回复 引用

#12楼[楼主] t2噬菌体 2008-09-23 13:14

@mjx

事物的新旧,不是以其出现时间来界定的,而是看其是否具有强大的生命力,是否顺应时代的需求。(ps:这句话摘自马克思的著作,不是我说的。)ajax就是这么一种东西,所以它必定会存在下去。当然,道路是曲折的,但前景是光明的。

不要忘了,当年日心说、进化论、甚至电话刚出现时都曾被认为是没有前途的垃圾。

回复 引用 查看

#13楼 timleaf 2008-09-25 08:31

--引用--------------------------------------------------

笨笨狼: @木野狐(neil chen)

你说的我也赞同,但是现在很多的所谓的程序员滥用ajax,我也觉得这个东西很垃圾,做垃圾网站的时候可以用下,ajax最烂的的地方就是安全性,可是偏偏很多it民工要把它用在bs上,靠,好像不用就觉得自己跟不上时代了,对这种it民工我真的很鄙视!

--------------------------------------------------------

timleaf

回复 引用 查看

#14楼 dynein[未注册用户]2008-12-09 16:56

做网站和做软件有区别?表示层不同而已

回复 引用

#15楼 mjx是sb[未注册用户]2009-03-26 20:53

不用理mjx那样的sb

回复 引用

#16楼 未注册用户[未注册用户]2009-04-12 08:29

@mjx

我不太认可你的观点。。。

其实能够把web开发做好也是件不容易的事情。。 winform 的使用 在某中意义上并没有web那样的方便。

回复 引用

#17楼 asidy 2009-07-26 22:57

看完了,感觉挺不错的,明白了一些以前显模糊的地方,thanks!赞一个!

回复 引用 查看

#18楼 的确小凉 2009-09-13 16:16

强烈支持一下

回复 引用 查看

#19楼 梅桦 2009-10-16 15:05

@mjx

what could you do?

回复 引用 查看

#20楼 新瓶老酒 2010-08-08 13:48

楼上的讨论很激烈,在此,非常感博主的ajax之旅的系统文章,ajax虽然写起来有些烦,但是给用户视觉上很享受。ajax走的道路,虽然曲折,但必定会成为b/s的发展区势。

回复 引用 查看

刷新评论列表刷新页面返回页首

发表评论

昵称: [登录]

[注册]

主页:

邮箱:(仅博主可见)

验证码:看不清。
       换一个

评论内容:

记住我的昵称和主页

-->

登录注册

[使用ctrl+enter键快速提交评论]

0

1296187

zlqbu5m04rs=

首页博问闪存新闻园子招聘知识库

最新it新闻:

·android平台12月广告浏览份额51.6% 超越ios

·测试版ios源代码显示ipad 3或将支持siri

·斯蒂芬·霍金的新电脑

·京东商城2.95亿竞得北京商业地一块

·美报业巨头合作facebook谷歌 传媒重视网络网络

» 更多新闻...

最新知识库文章:

·javascript 面向对象编程

·持续集成之“everything is code”

·持续集成之“软件自我识别”

·持续集成之戏说check-in dance

·什么是闭包。
       我的理解

» 更多知识库文章...

china-pub 2011秋季教材巡展

china-pub 计算机绝版图书按需印刷服务


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/

相关文章推荐

ASP.NET AJAX客户端编程之旅(二)——知其所以然

====================================================== 注:本文源代码点此下载 =============================...

ASP.NET AJAX客户端编程之旅.zip

  • 2009年09月17日 10:33
  • 688KB
  • 下载

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程

在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,...

Asp.net Ajax 客户端编程—面向对象

面向对象 Asp.net Ajax的客户端框架扩展了Javascript语言。扩展了Javascript的6个原生对象的方法,添加了许多.Net程序员熟悉的方法。如:string.format()。...

Asp.net Ajax客户端编程二之页面生命周期和请求生命周期

Asp.net Ajax客户端编程之页面生命周期和请求生命周期     Asp.net Ajax框架为客户端也赋上了页面的生命周期,类似于服务器段的页面事件:PreInit,Init,Complet...

ASP.NET Ajax 客户端框架未能加载解决方案

今天在做项目时,需要重新部署一台测试环境,折腾差不多了之后访问网站,就开始提示了"错误: ASP.NET Ajax 客户端框架未能加载"的错误,而且是连续爆出一下错误,这是在其它部署环境上没遇到过的问...
  • wyx1132
  • wyx1132
  • 2011年11月29日 15:05
  • 4844

使用ASP.NET AJAX启用客户端缓存

背景   缓存是开发高性能和高可用性Web应用的重要手段之一。作为ASP.NET AJAX的关键功能,从客户端访问Script Method会被大量用于使用ASP.NET开发的AJAX应用。以下是这...

ASP.NET AJAX客户端生命周期分析

正文:   一、引言   在上篇中,我们对微软的ASP.NET AJAX框架的客户端生命周期过程作了理论上的分析。在本篇中,我们要结合一个具体示例针对页面的客户端生命周期期间有关重要事件的发生顺序...

使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型

====================================================== 注:本文源代码点此下载 =============================...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET AJAX客户端编程之旅(七)——剩下的问题(完结篇)
举报原因:
原因补充:

(最多只允许输入30个字)