AJAX 在 ASP.NET 中






1.39/5 (9投票s)
2007年11月4日
6分钟阅读

44685

89
本文演示了如何使用 XMLHttpRequest 对象在 Asp.Net 中实现 AJAX。
引言
在所有 Web 应用程序中,当您提交按钮或将数据发送到服务器时,服务器每次都会向您提供一个新网页。
如果我只想处理网页的一部分,并且在这部分中获得另一个网页的内容而不重新加载整个页面怎么办?我如何在不加载整个页面的情况下,在当前页面的一个 DIV HTML 元素中显示来自另一个网页的数据?
注意: 要阅读本文,您必须理解:
-
HTML / XHTML
-
JavaScript
什么是 Ajax?
Ajax 不是一项发明,也不是一种新的编程语言,它是一种基于现有技术(JavaScript、XML、HTML、CSS)构建的 Web 开发技术。Ajax 代表(异步 JavaScript 和 XML),这种技术使您的网站更灵活、更快速、更友好、更具交互性。Ajax 在 2005 年随着 Google 使用这项新技术而普及。
Ajax 能做什么?
如果我只想处理网页的一部分,并在这一部分中只获取客户端所需的内容,而无需重新加载整个页面怎么办?!
这就是 Ajax 的作用,使用 Ajax,JavaScript 可以通过 XMLHttpRequest 对象与服务器通信,并进行数据交换。当您想通过 JavaScript 从服务器获取或发送数据时,我们会创建一个表单并发布这些数据,但不幸的是,它会通过 http 请求重新加载一个新页面。现在,我们可以在后台获取服务器数据,而无需重新加载网页,它会停留在当前页面,并且不会注意到后台发生的任何事情。
一个简单的 Ajax JS 方法
无论您使用 Ajax 做什么,它们都依赖于相同的基本函数。这里我使用了一个名为:ajaxpage(URL, ContainerID) 的函数,它接收我们想要在当前页面显示的目標页面的 URL,并接收我们将要在当前网页中显示目標页面的容器 ID(在我们的例子中是 DIV),此函数将完成所有工作,通过 XMLHttpRequest检索页面并显示它。
我将简要解释该函数的作用,使您能够轻松地在您的网站上使用 Ajax 发送“Get”或“Post”请求,并且我将为您提供一些 URL,您可以在其中了解并找到更多关于使用此对象的信息。
这是 JavaScript 文件 Ajax.js
ajaxpage()
var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects=""
var rootdomain="http:///">http://"+window.location.hostname
var bustcacheparameter=""
function ajaxpage(url, containerid)
{
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari, Firefox, Opera 8.0+, Safari
page_request = new XMLHttpRequest()
else if (window.ActiveXObject) // ifInternet Explorer\
{
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e)
{
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
document.getElementById(containerid).innerHTML=loadstatustext
page_request.onreadystatechange=function()
{
loadpage(page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
}
function loadpage(page_request, containerid){
if (page_request.readyState != 4)
{return;}
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
//alert(page_request.responseText)
}
这个方法是做什么的?
我们创建一个变量 page_request 来保存 XMLHttpRequest 对象。然后尝试使用 XMLHttp=new XMLHttpRequest() 创建对象。这是针对 Firefox、Opera 和 Safari 浏览器的。如果失败,则尝试 xmlHttp=new ActiveXObject ("Msxml2.XMLHTTP"),这是针对 Internet Explorer 6.0 的,我想您可以自己弄清楚其余部分的作用。
注意:上面的代码适用于大多数浏览器。
onreadystatechange 属性
readyState 属性保存服务器响应的状态。每次 readyState 更改时,都会执行 onreadystatechange 函数。
if (page_request.readyState != 4) // 请求已完成
responseText 属性
可以使用 responseText 属性检索从服务器返回的数据,我们使用此代码检索:
document.getElementById(containerid).innerHTML=page_request.responseText;
向服务器发送请求
open() 方法接受三个参数:第一个定义发送请求时使用的方法(GET 或 POST)。第二个指定服务器端脚本的 URL。第三个指定应异步处理请求。send() 方法将请求发送到服务器。
如何使用此方法
-
将包含我们将要调用的函数的 Ajax 文件 ajax.js 包含到您的应用程序中。
-
将一个名为 Loading.gif 的图片包含在 images 文件夹中,该图片将在页面请求过程中显示。
-
创建两个页面,我们将从另一个页面/页面 ajaxpage1.aspx 和 ajaxpage2.aspx 调用,这两个是目标文件。
-
创建一个显示页面 display.aspx,我们将在其中调用其他 2 个页面。
-
在创建 ajaxpage1.aspx 页面时,我们删除所有 html 元素(除了 page 指令),然后放入一个 div,并在其中写入“这是 Ajaxpage1”,并简单地在第二个页面做同样的事情,但在其中写入“这是 ajaxpage2”,这样我们就可以知道我们正在调用哪个页面。
HTML 页面将如下所示
目标 HTML 页面
<%@ Page Language="C#" AutoEventWireup="true"CodeFile="ajaxpage1.aspx.cs" Inherits="_Default" %>
<div style="width: 100px; height: 100px">
this is the first page
</div>
在 display.aspx 页面中,我们将使用上面 ajax.js 文件中的函数来调用其他 2 个页面。我们创建一个 DIV 并给它 ID="Main1",这是将显示其他页面的容器,我们放入两个按钮,button1 将调用 AjaxPage1.aspx,button2 将调用 ajaxpage2.aspx。在 page 指令之后,我们将 放入以下代码:
<script src="ajax.js"></script> <script> var loadstatustext=" <img src='images/loading.gif' /><Font Class='Content'> جارى التحميل </font>"; function Page1() { var links="AjaxPage1.aspx"; var container1="Main1"; ajaxpage(links,container1); } function page2() { var links="AjaxPage2.aspx"; var container1="Main1"; ajaxpage(links,container1); } </script>
正如您所看到的,第一个脚本调用了 ajax.js 文件,然后我们有一个名为loadstatustext 的变量,它是在页面请求过程中显示的 GIF 图片,然后,在 page1() 函数中,我们定义一个变量Links,它是将在当前页面显示的所需网页,以及另一个名为container1 的变量,我们希望页面显示在此处,我将其指定为我想显示数据的 DIV 的 id。
然后,我们希望将脚本注册到两个按钮,因此双击 button1 将创建 click 事件处理程序并将此代码放入以启动 page1() 函数。
protected void Button1_Click(object sender, EventArgs e)
{
Page.RegisterStartupScript("StartUp", "<script>page1( );</script>");
}
对 button2 执行相同的操作以启动 page2() 函数。
当运行 display.aspx 并按下 button1 时,它将显示
这是第一个 Ajax 页面!
当按下 button2 时,它将显示
这是第二个 Ajax 页面!
您可以在处理过程中注意到 loading.gif 图像。
结论
在本文中,我希望以简单的方式展示如何在 ASP.NET 应用程序中使用 AJAX 技术。Ajax 是一项新技术,值得在您的网站上使用。我认为,当您了解这项技术可以多么轻松地完成您想要的一切时,您现在就已经走得很远了。感谢您阅读我的文章,您将在文章中找到源代码,其中包含我在此处提到的所有文件,您可以轻松运行它们,我正在等待您的评论:D。
参考文献