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

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

说明:

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

  AJAX
是什么?

它就是异步JSXML的缩写.它不是一项新技术.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,不能用于商业用途,如果转载请注明出处.

 

原文地址:https://www.cnblogs.com/lgp/p/255404.html