第10讲:整合AJAX应用

2010.9.10 苏鹏

内容介绍

-Ajax类库介绍

-ASP.Net MVC2使用Ajax类库实例

 

预备知识

-安装Visual Studio 2010 Express

-了解ASP.Net

-了解Ajax基础知识

-了解设计模式基本概念

 

在ASP.Net MVC中使用

-Microsoft ASP.Net Ajax

-jQuery

 

Ajax的使用范围

-适合Ajax的场景

例如有个大型门户网站,它有个查询天气的模块,一点天气预报就查出来了。一点这个天气按钮,如果重新渲染整个页面,那无疑是会无意义的耗费很多资源。我们离线的情况应该是,服务器拿到请求后,返回几个数,最高气温、最低气温、一个枚举的天气状况等。像这种情况用Ajax再合适不过了。

它有几个优势:

1.减少数据传输,提高用户响应程度

2.减少数据传输,服务器端负载减轻

3.操作完全异步。当您发送请求的时候,请求是拿JavaScript在后端发送的。用户浏览页面依然不受影响

 

-不适合Ajax的场景

它有几个缺点:

1.由于Ajax是异步请求,它会保存当前Http场景和状态。据调查,浏览器上最常用的按钮是“回退”按钮。如果是看完北京天气,想再看南京天气,您不能退回一开始的选择状态,只能重新选择城市。原因就在于它没有状态保存回退按钮

2.如果用户没有JavaScript脚本支持(例如JavaScript脚本被禁用),Ajax就用不了。但在MVC架构中,用户即使禁用了JavaScript脚本,也有办法能解决这个问题,使得效果和没禁用一样,但它走的不是异步请求,但从用户角度能平滑地过渡

3.Ajax被滥用。Ajax用太多导致服务器端负载太大

 

Ajax使用实例

-每个Ajax请求都会指定确定的Action

-Action会判定是否来自Ajax

-针对Ajax请求必须返回一个特殊的View

 

脚本启用问题

image

用AjaxForm代替普通的Form,它的请求就变成了Ajax请求。当然,还要加载两个JavaScript类库,之所以把两个加载写在最下面,是有讲究的。写在最前面将会在页面加载最开始加载两个类库,而写在最低端将会在最后加载类库。JavaScript加类库的加载是阻塞模式,当我加载一个JavaScript文件的时候,我的请求就定住了,必须等它加载完了才能加载第二个。这种小技巧做法能保证网页的性能会好一点。

Action代码

image

Routing会根据Action名称,为Ajax方法找到它所对应的Action。

Html生成代码

image

一旦JavaScript被禁用,这些事情都不能做了。

如果是异步的方法无法实现,那就是用同步。

问题原因在于服务器端对于是否是Ajax请求都返回一样的结果(都返回了字符串),假如我们针对Ajax请求和非Ajax请求返回不同的结果,问题就迎刃而解了。比如,用户请求是Ajax请求的话,就返回局部变量;否则,返回整个View。所以无论是哪种情况,无非是等待刷新局部页面或是刷新整个页面的区别,看起来没有任何的差别了。

Ajax请求的特质无非就是它调用了XMLHttpRequest对象,来代替普通的Http请求。所以在HttpHandle里面的头部会有一个信息

image

这是对普通Request的一个扩展。普通Request没有这些信息。在上面图中有两处都写了XMLHttpRequest标记,这是因为有些时候防火墙会把x-requestes的标记去掉。所以为了稳妥,直接在请求的每个字符串最后都加上这个标记。

修改代码:

image

以上方法已经基本解决问题,但是方法并非完美。因为我们的方法里写了X-Requested-With关键字(Magic Word),我们应该把Ajax请求的判定用一个函数封装。

image

这里IsAjaxRequest已经是MVC架构所提供的,所以我们可以踏踏实实使用这个函数来判定,不用自己写。

 

使用PartialView返回

image

PartialView只带有Html的一点标签,这里使用它,是为了专门把结果以Table的形式放到用户端。

当是Ajax请求的时候我们用PartialView返回,当不是Ajax请求的时候我们用View返回。

image

 

介绍Microsoft ASP.Net Ajax

ASP.Net Ajax架构并不是一个庞大的架构,它完整的尺寸只有98k。

ASP.Net Ajax架设计理念:.NET for JavaScript

jQuery的目标是把语法简化,ASP.Net Ajax的目标完全不一样,它是使劲往.NET Framework上贴。它的实现想让你看起来感觉和.NET Framework是一回事。

 

使用JQuery更新

image

 

AutoComplete TextBox

-使用ASP.Net Ajax类库实现

image

标签System.Web.Script.Services.ScriptService是说明这个WebService可以被脚本调用,也就是JavaScript可以调用它。

前端调用:

image

$create方法的参数中的$get(‘query’)表示对应的实现自动匹配的文本框是哪一个。

在WebForm中没有见加载那么多JavaScript文件,是因为它有一个ScriptManager,这个ScriptManager完成了所有相应脚本的调用。你可以自己写一个JavaScript把所有的文件调用都放到里面,然后只需要调用那一个JavaScript就可以了,这样写着要方便一点。

 

通过下拉框筛选数据

-使用JQuery实现

先定义Action

image

View

image

image 

image

其中load方法是个Ajax请求。

 

使用模态窗口

image

image

 

评级控件

image

原理是修改RadioButton的样式。

image

image

image

给评级控件添加Ajax特性

image

 

总结

-Ajax类库介绍

-ASP.Net MVC2使用Ajax类库实例

2010.10.3

posted @ 2010-10-03 21:43  山天大畜  阅读(1312)  评论(0编辑  收藏  举报