-
AJAX 简单介绍:
AJAX是由JavaScript、XML、CSS、DOM等技术组成,其中XMLHttpRequest对象是AJAX的核心,该对象由JavaScript创建,负责在后台以异步的方式让客户端与服务器交互.
代码演示:
Default.aspx <head>部分:
var xmlHttp;
function checkUsername() {
var username = document.getElementById( " txtUsername " ).value;
xmlHttp = getXMLHttpObject();
// 指明服务器端响应后的回调函数.
xmlHttp.onreadystatechange = callBack_CheckUsername;
// 连接到服务器端.
xmlHttp.open( " get " , " CheckUsername.aspx?username= " + username, true );
// 发送请求.
xmlHttp.send( null );
}
// 根据浏览器的不同创建xmlHttp对象.
function getXMLHttpObject() {
try {
xmlHttp = new XMLHttpRequest();
}
catch (e) {
try {
xmlHttp = new ActiveXObject( " Msxml2.XMLHTTP " );
}
catch (e) {
xmlHttp = new ActiveXObject( " Microsoft.XMLHTTP " );
}
}
return xmlHttp;
}
function callBack_CheckUsername() {
// 状态为4即服务器端成功返回.
if (xmlHttp.readyState == 4 ) {
var checkResult = document.getElementById( " checkResult " );
// responseText为服务器端返回的字符串.
checkResult.innerHTML = xmlHttp.responseText == " true " ? "" : " Please choose another name. " ;
}
}
< / script>
<body>部分:
< div id ="checkResult" ></ div >
CheckUsername.aspx.cs :
{
Response.Clear();
Response.Write(Request.QueryString[ " username " ] == " admin " ? " false " : " true " );
Response.End();
}
结果预览:
AJAX技术给用户带来了流畅友好的体验,同时发现以上JS代码实现起来比较麻烦.
如何来简化这些操作,其实我们可以使用ASP.NET AJAX框架,或者说直接在客户端就能调用服务器页面方法.
ASP.NET AJAX 框架简单介绍:
ASP.NET AJAX可分为Microsoft AJAX Library(客户端部分),AJAX Extensions AJAX Control Toolkit(服务器端部分)两个部分.
Microsoft AJAX Library: 它包括类似于ASP.NET服务器端控件一样良好封装,可运用于各种主流浏览器之上的客户端组件.
AJAX Extensions,包括由开发者社区共同创建的AJAX Control Toolkit,则是ASP.NET服务器端组件的扩展.
代码演示:
分别以WebService、PageMethods两种方式调用服务器端方法.
WebService方式:
SayHelloService.asmx:
namespace AJAXExercise
{
[WebService(Namespace = " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem( false )]
[System.Web.Script.Services.ScriptService]
public class SayHelloService : System.Web.Services.WebService
{
[WebMethod]
public string SayHello( string name)
{
return " Hello " + name;
}
}
//类和方法上面的ScriptService、WebMethod是客户端访问到该WebService所必需的.
}
Default.aspx <body>部分:
ScriptManager控件是ASP.NET AJAX的核心,用来将ASP.NET AJAX框架所需要的JavaScript文件、自定义的ASP.NET AJAX客户端组件以及该页面将要调用的Web Service的客户端代理发送到客户端.
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="JScript.js" />
</Scripts>
<Services>
<asp:ServiceReference Path="SayHelloService.asmx" />
</Services>
</asp:ScriptManager>
<input id="txtName" type="text" />
<input type="button" value="Say Hello" onclick="sayHello()" />
<div id="show"></div>
JScript.js:
/*
别忘了前面的命名空间,我这里的是AJAXExercise.
通过ASP.NET AJAX框架,可以使用$get("")来代替document.getElementById("")
SayHello传递的第1个参数是name,第2个参数是指明服务器端成功返回后的回调函数.还
可以指明第3个参数即失败后要调用的回调函数.
*/
AJAXExercise.SayHelloService.SayHello($get( " txtName " ).value, succeeded);
}
function succeeded(result) {
$get( " show " ).innerHTML = result;
}
PageMethods方式:
Default.aspx <body>部分
< asp:ScriptManager ID ="ScriptManager1" runat ="server" EnablePageMethods ="True" />
< input id ="txtUsername" type ="text" />
< input type ="button" value ="Say Hello" onclick ="sayHello()" />
< div id ="show" ></ div >
Default.aspx <head>部分
function sayHello() {
PageMethods.SayHello($get( " txtName " ).value, succeeded);
}
function succeeded(result) {
$get("show").innerHTML = result;
}
< / script>
Default.aspx.cs :
{
}
[System.Web.Services.WebMethod]
//该方法必须为static.
public static string SayHello( string name)
{
return " Hello " + name;
}
两种方式,结果预览: