在ASP.NET中使用AJAX(转译自www.asp.net网站)(一)

题记:
不久前在一份外国人的BLOG中看到这样的论述,关于为什么写BLOG,他说是为了忘却的记念,为了理解自己的思绪,为了让自己的想法获得一个文件式的记忆.这样说的很有道理.但是此篇文章,是译自别人的技术文章.也许,也是为了忘却的记念吧!


说明:

ASP.NET的页面是基于回传模式的,这也就竟味着,如果你想执行服务器端的事件,在客户端必须要回传页面.这种事件驱动模式,当然更强大,但是它必须每次回传都要重写页面.现在的大多数浏览器都支持JS和DHTML.AJAX 模式就为了让用户有更智能的体验到方便快捷的操作.在第一部分,我会用一人简单的例子来解释这个模型.

  AJAX 是什么?

它就是异步JS和XML的缩写.它不是一项新技术.IE, HTML, XML, DOM, XMLHTTP 已经存在并使用好多年,AJAX就是让它们彼此分离的部分合到一起,来进行工作.

想像一下,如果有一个按钮,标签,和文本框的网页,文本框来执按受一个ID,当你点击BUTTON时会在标签里显示相关ID 的用户名,你会怎么做?

你会在你的按钮事件里写上获得相关ID用户信息的过程,再促发一个回传事件,可是你再想如果你的网页上有很多控件,那每次回传都要重写,是不是很费服务器资源,当然会影响处理速度.

AJAX解决了这个问题.利用它你不再需要上频繁的回传网页,相反你可以发送一个请求,在服务器端处理,然后返回,相应的控件也就会重写,显示所需要的值.

一方面,这种模式可以让用户有更好的体验,并能提高速度,但是另一方面你要考虑你的浏览器是否支持JS.

一个简单的例子:

为了体验这种模式的工作方式,我们来作一个例子,这个例子包括两个网页,其中一个有一个按钮和标签,这个网页将通过AJAX来调用第二个网页.第二个网页没有用户接口,不直接显示内容.当LOAD页面时它用来输出"HELLO WORLD" ,这个字符串会显示在第一个窗体的标签上.

1> 用VS.NET 新建一个WEB应用程序

2> 添加一个窗体,并放上按钮和标签各一个
3> 在写LOAD事件中写过程

Private Sub Page_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
        Button2.Attributes.Add("OnClick",
"return GetDataViaAJAX();")
        If Page.IsPostBack Then
            Label1.Text = "Server Date Time :" & DateTime.Now
        End If
    End Sub


在这我们要对这个按钮添加一个客户端处理事件,我们让标签显示出服务器的日期,但是它不会出现在标签上,因为根本没有回传事件,这样写只是为了验证一下,然后,在HTML页面文件的<HEAD>里面加上如下的JS方法:

var obj;
function GetDataViaAJAX()
{
try
{
obj = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
obj = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e1)
{
obj = null;
}
}
if(obj!=null)
{
obj.onreadystatechange = ProcessResponse;
obj.open("GET", 
"http://localhost/AJAXDemo/helloworld.aspx",  true);
obj.send(null);         
}
return false;
}
            







   在这我们实例化一个XMLHTTP类,这是AJAX模型的关键所在,它可以异步获取服务器资源.TRY...CATCH块是为了防止,MSXML不同版本而出现的异常.
   该类onreadystatechange这个属性是用来调用ProcessResponse方法,ProcessResponse这个方法用来处理获得的数据,
    然后,我们通过GET或是POST调用OPEN方法,最后执行SEND方法,假设你用POST方式可以传递参娄,而这里用的是GET所以我们不用考虑参数.








 

function ProcessResponse()
{
if(obj.readyState == 4) { if(obj.status == 200) { var retval=obj.responseText; alert(retval); } else { alert("Error retrieving data!" ); } }






}      
   

当第二个页面传回HELLOWORK时,这个ProcessResponse就会调用.检验RreadyState属性值,如果是4代表请求完成,然后如果代码状态值是200,则表明OK.
最后我们通过responseText来获得返回数据,还有一个responseXML属性是用来获得返回的XML数据(如果有的话)
下面添到第二个网页上LOAD事件中的代码:

 

Private Sub Page_Load(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles MyBase.Load
        Response.Clear()
        Response.Write("hello world")
        Response.End()
End Sub
   

   在这,首先清理RESPONE,发送一个字符串.设置第一个页为启始页,启动项目,查看结果.
   
例子源代码下载  



 





总结:

在这篇文章中,我们看到了如何用AJAX来帮助我们处理响应和提高效能.同样,我们也看到了XMLHTTP component 是如何试水IE的.
在下一节,我会讲述更详细,更复杂的获取XML的方法.





   
备注:签于个人水平,文章中难免有错误纰漏这处,敬请原谅!本文章转译自www.asp.net,不能用于商业用途,如果转载请注明出处.

posted @ 2005-10-15 14:37  Henry Liu  阅读(670)  评论(0编辑  收藏  举报