(二) 页面特定的方法
现在,我们已经建立起实现一个到远程页面调用的所有方法。为此,我们需要把回调函数名传递给GetXmlHttpObject方法,然后把URL串传递给SendXmlHttpRequest方法。
var xmlHttp; function ExecuteCall(url){ try { xmlHttp = GetXmlHttpObject(CallbackMethod); SendXmlHttpRequest(xmlHttp, url); } catch(e){} } //当状态改变时(例如收到数据时),CallbackMethod将激发 function CallbackMethod() { try { //readyState=4 或'complete' 代表了数据已经返回 if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete') { var response = xmlHttp.responseText; if (response.length > 0) { //更新页面 document.getElementById("elementId").innerHTML= response; } } } catch(e){} } |
CallbackMethod负责更新页面内容。在我们的示例中,它只是简单地更新给定HTTP元素的内部HTML。但是,在实际开发中,它可能更为复杂些。
有关于调用页面实现的最后一个问题是,我们如何调用ExecuteCall JS方法。其实,这依赖于这个页面正在做什么。在一些情况中,ExecuteCall方法在JS事件被激发时被调用。但是,如果情况不是这样,我们可以把这个方法注册为这个页面的一个启动脚本-使用在该页面的code-behind中的相应的C#代码。
Page.RegisterStartupScript("ajaxMethod", String.Format("<script>ExecuteCall('{0}');</script>", url)); |
我们可以把这一行代码添加到ASP.NET code-behind文件的Page_Prerender或Page_Load方法中。
(三) 远程页面
下面,让我们分析一下过程页面看起来的样子。如果这是一个ASP.NET页面(我们假定如此),那么我们仅对它的code-behind感兴趣。我们可以很容易地从这个.aspx文件中移去所有代码:它不会以任何方式影响这个页面的行为。
例如,我们使用一个公共的web服务-它能够把温度值从摄氏转换为华氏(以及相反的实现)。此处提供了一个这样的可用的服务。如果你把这个URL作为一个web引用添加到你的工程中,那么Visual Studio将在你的当前的命名空间中生成一个名为com.developerdays.ITempConverterservice的代理类。我们的远程ASP.NET页面(假设命名为getTemp.aspx),将接收一个查询串参数(名为"temp")-它应该包含一个要转换的摄氏温度的整型值。所以,到远程页面的目标URL看上去类似于:
http://localhost/getTemp.aspx?temp=25。下面显示了这个页面的code-behind:
private void Page_Load(object sender, EventArgs e){ Response.Clear(); string temp = Request.QueryString["temp"]; if (temp != null) { try { int tempC = int.Parse(temp); string tempF = getTempF(tempC); Response.Write(tempF); } catch { } } Response.End(); } private string getTempF(int tempC){ com.developerdays.ITempConverterservice svc = new ITempConverterservice(); int tempF = svc.CtoF(tempC); return tempF.ToString(); } |
根据我们的惯例,现在我们可以为将传递到RegisterStartupScript方法中的远程页面构建一个URL字符串,象下面这样:
int tempC = 25; string url=String.Format("http://localhost/"+"getTemp.aspx?temp={0}", tempC); |
使用这种方法并结合一个中间ASP.NET页面调用允许简化响应处理,特别是在请求分析的时候。在简单的情况中,当响应仅包含文本数据时,我们可以把远程服务URL直接传递给JS ExecuteCall方法。
五、结论 本文意在向你展示把AJAX技术使用于任何ASP.NET应用程序的简单性。然而,AJAX也有一些缺点,从用户体验角度来看,它也提供了一些优点。这完全要由开发者来决定是否使用AJAX技术,但是我在本文中仅向你展示了简单的情形,它不需要花费很长时间且不需要任何特定技巧。
更多内容请看PCdog.com--.NET基础介绍 .NET实用开发 .NET应用研究专题
上一页 [1] [2]