ajax|定时|数据|数据库|刷新|无刷新
通过上次那个Hello,World的基本ATLAS程序的联系,对于ATLAS我们可能只有一大概的印象.那么我们有要开始实现我们的目标:定时无刷新的随机显示数据库中的一条数据和按下按钮来显示数据库中的一条数据.
方式:ASP.NET的客户端控件.(我们知道ASP.NET是用服务器端控件的.客户端的控件就是以前普通的HTML表单控件.对于服务器端的实现我们在下次解决.其实我们以前的实现方式都是基于客户端的实现方式如果要与ASP.NET结合我们就要换成另外一种方式,当然ATLAS是提供了服务器端控件以实现服务器端的AJAX应用.)
通过上次的那篇文章,我们知道其实ATLAS的AJAX实现方式是用一个客户端的JS代码加一个服务器端的Web Service(我觉的MICROSOFT就是会替自己考虑,建立一个ATLAS应用可以顺便利用下Web Service )
现在开始我们代码的书写.
页面代码:
程序代码
<form id="formrefresh" runat="server">
<div>
<div id="EngCnb"><div id="FamousDivb" class="AlDivb"><a href = "http://www.flysblog.com" target="_blank">天涯路远</a> --- 君在天涯,天涯在我心。 -----倾力打造 </div></div>
<div id="EngCn"><div id="FamousDiv" class="AlDiv">名人名言正在载入...</div></div>
<script type="text/javascript">
window.setTimeout("StartFamous()",1000);
</script>
<div><div id="Div1"><div id="Div2" class="AlDivb">
<input id="txtFamous" style="width: 500px" type="text" />
<input id="btnGet" type="button" value="获取名言" onclick = "DoSearch()"/></div></div>
</div>
</div>
</form>
部分页面的JS代码:
程序代码
function StartFamous()
{
DoSearchTimer();
window.setInterval("DoSearchTimer()",EngCTime*1000);
}
function DoSearchTimer()
{
Samples.AspNet.getFamousService.getFamous(OnRequestCompleteTimer);
}
function OnRequestCompleteTimer(result)
{
ChangeFamous(result);
}
function DoSearch()
{
//var SrchElem = document.getElementById("SearchKey");
Samples.AspNet.getFamousService.getFamous(OnRequestComplete);
}
function OnRequestComplete(result)
{
document.formrefresh.txtFamous.value = result;
}
照例我们新建一个Web Service代码如下
程序代码
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;
namespace Samples.AspNet
{
/// <summary>
/// HelloWorldService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class getFamousService : System.Web.Services.WebService
{
public getFamousService()
{
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string getFamous()
{
//string inputString = Server.HtmlEncode(query);
//if (!String.IsNullOrEmpty(inputString))
//{
// return String.Format("Hello, you queried for {0}. The "
// + "current time is {1}", inputString, DateTime.Now);
//}
//else
//{
// return "The query string was null or empty";
//}
string db = Server.MapPath("famousDB/famous.mdb");
int uidd = 1;
OleDbDataReader rd = null;
OleDbConnection conn = null;
try
{
System.Random r = new Random();
uidd = r.Next(1,69);
string sql = "select Top 1 * from famous where id="+ uidd.ToString();
conn = new OleDbConnection(@"Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + db + ";");
conn.Open();
OleDbCommand cmd = new OleDbCommand(sql, conn);
rd = cmd.ExecuteReader();
if(rd.HasRows)
{
rd.Read();
return rd[1].ToString();// Response.Write(@"<querys><Famous><![CDATA[" + rd[1].ToString() + @"]]></Famous></querys>");
} else {
return "null";//Response.Write(@"<querys><Famous><![CDATA[null]]></Famous></querys>");
}
}
finally
{
// always call Close when done reading.
rd.Close();
// always call Close when done reading.
conn.Close();
}
}
}
}
其实整个过程跟上次的那个Hello,world的ATLAS程序一模一样的。就是把Web Service中执行的函数换个内容.
到此你可以运行你建立的程序或者运行我提供的代码程序.你会发现实现的内容跟用自己建立的小型框架的效果一模一样.
总结
这个ATLAS的客户端应用,感觉MICROSOFT没有象AJAX.NET PRO的AJAX框架一样,实现客户端的JS代码直接调用服务器端的函数代码,而是通过了中介Web Service.虽然AJAX.NET PRO让我非常的郁闷。但是它能直接调用服务器端的方法这点倒是很好(虽然我自己没有调试通那个代码,只实现了简单的字符返回,没有实现数据库的读取).下一个应用我们将用服务器端的控件来实现这个应用.