65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET, AJAX 和 XML:创建一个简单的计数器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.45/5 (5投票s)

2008年7月21日

CPOL

2分钟阅读

viewsIcon

24376

downloadIcon

194

这篇文章简单演示了如何使用 asp.net 和 Ajax 与 XML 文件交互

引言

创建一个简单的计数器,每次页面加载时递增。这使用了 Ajax 和 ASP.NET 技术。数据存储和检索在 XML 文件中。页面加载后,它通过 ajax 向 ASP.NET 文件发送一个查询,该文件打开一个 xml 文件进行读取、写入、保存,并将结果发回。与此同时,Ajax 正在等待并侦听响应,一旦收到,它就会显示并格式化它。

更重要的是,这个简单的项目展示了 ajax 的强大功能..以及在现有的后端代码中实现它有多么简单。

Using the Code

代码要正常工作,需要 3 个部分

1. CountViews.xml (XML)

<?xml version="1.0" encoding="UTF-8"?>
<CountViews>
<views>1</views>
</CountViews>

这是您的数据源,将存储和保存计数器值的增量。如果您不熟悉 XML,请在 Google 上搜索“XML 教程”。

2. CountViews.cs (C#)

 
public partial class CountViews : System.Web.UI.Page
  {
  public string QQ = HttpContext.Current.Request.QueryString["QQ"];
  public string thePath = "CountViews.xml";
protected void Page_Load(object sender, EventArgs e) { count(Convert.ToInt32(QQ)); }

public void count(int myQQ) {

XmlDocument doc = new XmlDocument();
//LOAD XML FILE try { doc.Load(Server.MapPath(thePath)); }
catch (Exception) { Response.Write("Couldn't load XML file. Check its permissions"); }

//FIND THE REQUIRED NODE
string xPathID = "/CountViews/views"; XmlElement myItem = (XmlElement)doc.SelectSingleNode(xPathID);
//GET CURRENT VALUE AND ADD INCREAMENT string views = (Convert.ToInt32(myItem.InnerText) + myQQ).ToString(); myItem.InnerText = views; try { //SAVE INCREASED VALUE

doc.Save(Server.MapPath(thePath)); } catch (Exception) { Response.Write("Couldn't save value check the permissions of your xml file"); }

//OUTPUT NEW VALUE Response.Write(views); }

}

这是您典型的 cs 后端代码。当 ajax 传递查询时,会发生一系列事件

1. XML 文件被加载到内存中。
2. 当前计数器值从 XML 节点中检索
3. 执行一个简单的计算来获取新的计数器值
4. 该值被保存到同一个 XML 文件中
5. 该值也被返回,Ajax 接收。

3. DisplayViews.aspx (Ajax, Javascript, html)

<script type="text/javascript">

function GetXmlHttpObject() { var xmlHttp=null; try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp;
} function ajaxUpdate(url, mydiv, QQ) {
xmlhttp=GetXmlHttpObject(); if (xmlhttp==null) { alert ("Your browser does not support AJAX!"); return; }
if (xmlhttp) {
xmlhttp.onreadystatechange = function() {
if ((xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete') && xmlhttp.status == 200) {
document.getElementById(mydiv).innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", url + "?q=" + Math.random()+ "&QQ="+QQ, true);
xmlhttp.send(null);
}
}</script>

<body onload="javascript:ajaxUpdate('CountViews.aspx','show_div','1');"> <form name="frmServerTime" id="frmServerTime">
<table border="0" cellpadding="4" cellspacing="0" id="Table2">
<tr><td>
<input type="button" name="btnTime" value=" +10 " id="btnTime"
onclick
="javascript:ajaxUpdate('CountViews.aspx','show_div','10');" />
<input type="button" name="btnTime" value=" +100 " id="Button1"
onclick
="javascript:ajaxUpdate('CountViews.aspx','show_div','100');" />
</td>
</tr>
<tr>
<td><div id="show_div" style="border:1px solid RED; width:100px; height:20px;"></div></td>
</tr>
</table></form>
</body>

Ajax 就像一个信使。它将从用户那里接收查询,将其传递给服务器,然后耐心等待答案。一旦检测到,它会将其显示给用户,最好使用 css 格式化。

第一个函数 GetXmlHttpObject() 根据您使用的浏览器创建一个 XMLHttpRequest。这对 ajax 的工作至关重要。

下一个函数 ajaxUpdate(url, mydiv, QQ) 是一个通过 ajax 传递 3 个变量的方法

1. url: 文件 ajax 要与之交互的 url。
2. mydiv: 您希望显示结果的 div 区域
3. QQ: 您希望通过 GET 使用 ajax 发送到后端脚本的任何额外查询。

此外,在这个文件 (DisplayViews.aspx) 上还有一个简单的 html 表单,其中包含用户界面。这在 body 标签上有一个 onload 事件,它触发 javascript 中的函数来增加计数器。

关注点

我还创建了 2 个额外的按钮,它们触发相同的函数,但具有不同的值。一个将计数器增加 10,另一个增加 100。
它展示了 ajax 可以有多么动态。您是否也注意到了速度..这很明显,因为页面不会加载。

© . All rights reserved.