📄 107.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<base href="http://localhost:8080/" />
<title>最基本的AJAX框架的实现方法</title>
<script language="javascript">
var sPath = document.location.protocol + "//" + document.location.host + document.location.pathname;
if(sPath.indexOf("/article/")>=0)
{
var sPath_tmp = sPath.split("/article/");
var BasePath = sPath_tmp[0]+"/";
document.write('<base href="'+BasePath+'" />');
}
</script>
<script language="javascript" src="images/js.js"></script>
<link href="css/css2.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="950" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="3" bgcolor="#106B61"></td>
</tr>
<tr>
<td><table width="950" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="200" height="87" align="center" background="images/index5_02.gif"><img src="images/logo.gif" width="142" height="62" /></td>
<td valign="bottom"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="40"><table width="99%" border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<td width="10%" align="left" class="red12"><strong>滚动新闻:</strong></td>
<td width="90%" align="left">
<div id="pro_demo" style="overflow:hidden;height:40px;width:660px;">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td id="pro_demo1" height="40"><table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="gray" nowrap="nowrap"> ·<a href="article/99.html" title="2.0版本发布">2.0版本发布</a></td>
<td class="gray" nowrap="nowrap"> ·<a href="article/89.html" title="2009-4-28更新日志">2009-4-28更新日志</a></td>
<td class="gray" nowrap="nowrap"> ·<a href="article/88.html" title="新闻系统全站静态化测试中">新闻系统全站静态化测试中</a></td>
<td class="gray" nowrap="nowrap"> ·<a href="article/83.html" title="Ok3w ASP新闻发布系统功能简介">Ok3w ASP新闻发布系统功能简介</a></td>
<td class="gray" nowrap="nowrap"> ·<a href="article/82.html" title="Ok3w ASP新闻发布系统功能简介">Ok3w ASP新闻发布系统功能简介</a></td>
<td class="gray" nowrap="nowrap"> ·<a href="article/81.html" title="Ok3w ASP新闻发布系统功能简介">Ok3w ASP新闻发布系统功能简介</a></td>
<td class="gray" nowrap="nowrap"> ·<a href="article/46.html" title="Ok3w ASP新闻发布系统功能简介">Ok3w ASP新闻发布系统功能简介</a></td>
</tr>
</table></td>
<td id="pro_demo2"></td>
</tr>
</table>
<script language="javascript" src="images/marquee.js"></script>
</div> </td>
</tr>
</table></td>
</tr>
<tr>
<td bgcolor="#106B61"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left"><img src="images/index5_08.gif" width="5" height="41" /></td>
<td align="center"> <a href="" class="white14b">网站首页</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_95_1.html" class="white14b">新闻资讯</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_102_1.html" class="white14b">网络安全</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_107_1.html" class="white14b">网页制作</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_85_1.html" class="white14b">办公软件</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_84_1.html" class="white14b">网站运营</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_83_1.html" class="white14b">平面设计</a> </td>
<td align="center"><img src="images/index5_11.gif" width="2" height="25" /></td>
<td align="center"> <a href="article/list_60_1.html" class="white14b">网络编程</a> </td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td height="37" align="center" background="images/index5_15.gif"><table width="98%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" class="green12gray">今天是<script language="javascript">
var mydate=new Date();
var mymonth=mydate.getMonth()+1;
var myday= mydate.getDate();
var myyear= mydate.getYear();
document.write(myyear+"-"+mymonth+"-"+myday);</script>,欢迎访问Ok3w新闻发布系统!</td>
<td align="right" class="green12gray"><a href="guest.asp">请您留言</a> | <a href="http://www.glzy8.com/ok3w/article/147.html" target="_blank">免费下载</a> | <a href="#" class="green12gray" onclick="this.style.behavior='url(#default#homepage)';this.setHomePage(document.URL);">设为首页</a> | <a href="#" class="green12gray" onclick="window.external.AddFavorite(document.URL,document.title);">加入收藏</a></td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top:2px;">
<tr>
<td align="left"><iframe id="baiduSpFrame" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0" framespacing="0" frameborder="0" scrolling="no" width="468" height="60" src="http://spcode.baidu.com/spcode/spstyle/style2220.jsp?tn=zhengbi_sp&ctn=0&styleid=2220"></iframe></td>
<td align="right"><iframe id="baiduSpFrame" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0" framespacing="0" frameborder="0" scrolling="no" width="468" height="60" src="http://spcode.baidu.com/spcode/spstyle/style1634.jsp?tn=zhengbi_sp&ctn=0&styleid=1634"></iframe></td>
</tr>
<tr>
<td colspan="2" align="left" height="5"></td>
</tr>
<tr>
<td align="left"><iframe id="baiduSpFrame" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0" framespacing="0" frameborder="0" scrolling="no" width="468" height="60" src="http://spcode.baidu.com/spcode/spstyle/style2615.jsp?tn=zhengbi_sp&ctn=0&styleid=2615"></iframe></td>
<td align="right"><iframe id="baiduSpFrame" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0" framespacing="0" frameborder="0" scrolling="no" width="468" height="60" src="http://spcode.baidu.com/spcode/spstyle/style2475.jsp?tn=zhengbi_sp&ctn=0&styleid=2475"></iframe></td>
</tr>
</table></td>
</tr>
<tr>
<td height="14" background="images/index5_31.gif"></td>
</tr>
</table>
<table width="950" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="40">您当前位置:<a href="">网站首页</a> >> <a href="article/list_107_1.html">网页制作</a> >> <a href="article/list_132_1.html">Javascript/Ajax</a> >> 阅读文章</td>
<form id="form1" name="form1" method="get" action="search.asp">
<td width="344"><span style="font-weight: bold">站内查找:</span>
<input name="keyword" type="text" id="keyword" size="29" />
<input type="submit" name="Submit" value="搜索" />
</td>
</form>
</tr>
</table>
<table width="950" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="top"><table width="100%" border="0" cellpadding="8" cellspacing="0" style="border:1px solid #AEE1DC;">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0" style="table-layout: fixed;">
<tr>
<td align="center"><h1>最基本的AJAX框架的实现方法</h1>
<hr size="1" color="#EBEBEB" />
来源:Ok3w新闻发布系统 发布时间:2009-05-01 00:38:02 查看次数:<span id="News_Hits"></span><iframe style="display:none;" src="hits.asp?type=news&id=107"></iframe>
<hr size="1" color="#EBEBEB" />
</td>
</tr>
<tr>
<td style="word-break: break-all; word-wrap:break-word;"><div class="gray14"><P>环境:Window Xp sp2 + .Net FramwWork 2.0.50727。<BR><B>Asp.Net 2.0自带的客户端回调</B><BR>Asp.Net 2.0已经发布。2.0有了许多新特性,客户端回调就是其中之一。客户端回调允许我们不经过回发而调用服务器端的方法,与AJAX提供的功能是一致的,但是不如AJAX灵活,AJAX可以自定义调用的方法,2.0自带的回调功能却不行。要使用客户端回调功能必须实现System.Web.UI.IcallbackEventHandler接口。<BR>这个接口包含两个方法:</P><PRE><OL class=dp-c><LI class=alt><SPAN><SPAN class=comment>//客户端回调时固定调用此方法 </SPAN><SPAN> </SPAN></SPAN><LI><SPAN class=keyword>public</SPAN><SPAN> </SPAN><SPAN class=keyword>void</SPAN><SPAN> RaiseCallbackEvent(String eventArgument) </SPAN><LI class=alt><SPAN class=comment>//执行完RaiseCallbackEvent后将调用此方法。此方法的返回值将被发回客户端 </SPAN><SPAN> </SPAN><LI><SPAN class=keyword>public</SPAN><SPAN> </SPAN><SPAN class=keyword>string</SPAN><SPAN> GetCallbackResult() </SPAN></LI></OL></PRE>
<P>例一:</P><PRE><OL class=dp-c><LI class=alt><SPAN><SPAN>.cs: </SPAN></SPAN><LI><SPAN>String cbReference = Page.ClientScript.GetCallbackEventReference( </SPAN><LI class=alt><SPAN> </SPAN><LI><SPAN class=keyword>this</SPAN><SPAN>,</SPAN><SPAN class=string>"arg"</SPAN><SPAN>, </SPAN><SPAN class=string>"ReceiveServerData"</SPAN><SPAN>, </SPAN><SPAN class=string>"context"</SPAN><SPAN>); </SPAN><LI class=alt><SPAN>String callbackScript; </SPAN><LI><SPAN>callbackScript = </SPAN><SPAN class=string>"function CallServer(arg, context)"</SPAN><SPAN> + </SPAN><SPAN class=string>"{ "</SPAN><SPAN> + cbReference + </SPAN><SPAN class=string>"} ;"</SPAN><SPAN>; </SPAN><LI class=alt><SPAN>Page.ClientScript.RegisterClientScriptBlock( </SPAN><LI><SPAN> </SPAN><LI class=alt><SPAN class=keyword>this</SPAN><SPAN>.GetType(),</SPAN><SPAN class=string>"CallServer"</SPAN><SPAN>, callbackScript, </SPAN><SPAN class=keyword>true</SPAN><SPAN>); </SPAN><LI><SPAN>javascript: </SPAN><LI class=alt><SPAN> </SPAN></LI></OL><P> <BR></P><P><STRONG>AJAX介绍<BR></STRONG>AJAX并不是一种新的技术,而是一些已有技术的有机结合,主要包括:XmlHttp、Reflect。一个AJAX框架基本上包括:一个自定义的HttpHandler、一段JavaScript代码。</P><P><B>AJAX运行机制</B><BR>以前我们使用XmlHttp实现无刷新页面的时候,是用XmlHttp来请求一个隐藏的页面,使用(Asp/Asp.Net)自带的HttpHandler,而在AJAX中,我们请求的也是一个隐藏的页面,不同的是这个页面的HttpHandler是由我们自己来实现。</P><P>打造自己的AJAX:<BR>1.首先我们要实现一个Http处理程序(HttpHandler)来响应客户端的请求:<BR>实现自定义的HttpHandler需要实现IHttpHandler接口。<BR>该接口包含一个属性和一个方法:</P><P> </P><PRE><OL class=dp-c><LI class=alt><SPAN><SPAN>bool IHttpHandler.IsReusable </SPAN></SPAN><LI><SPAN class=keyword>void</SPAN><SPAN> IHttpHandler.ProcessRequest(HttpContext context) </SPAN><LI class=alt><SPAN>Example: </SPAN><LI><SPAN>bool IHttpHandler.IsReusable </SPAN><LI class=alt><SPAN>{ </SPAN><LI><SPAN> get { </SPAN><SPAN class=keyword>return</SPAN><SPAN> </SPAN><SPAN class=keyword>true</SPAN><SPAN>; } </SPAN><LI class=alt><SPAN>} </SPAN><LI><SPAN class=keyword>void</SPAN><SPAN> IHttpHandler.ProcessRequest(HttpContext context) </SPAN><LI class=alt><SPAN>{ </SPAN><LI><SPAN> context.Response.Clear(); </SPAN><SPAN class=comment>//获取要调用的方法 </SPAN><SPAN> </SPAN><LI class=alt><SPAN> string methodName = context.Request.QueryString[</SPAN><SPAN class=string>"me"</SPAN><SPAN>]; </SPAN><LI><SPAN> </SPAN><SPAN class=comment>//获取程序集信息。 </SPAN><SPAN> </SPAN><LI class=alt><SPAN> </SPAN><SPAN class=comment>//Czhenq.AJAX.Class1.Dencode是自定义的字符串编码方法 </SPAN><SPAN> </SPAN><LI><SPAN> string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString[</SPAN><SPAN class=string>"as"</SPAN><SPAN>]); </SPAN><LI class=alt><SPAN> </SPAN><LI><SPAN> </SPAN><SPAN class=comment>//获取方法的参数 </SPAN><SPAN> </SPAN><LI class=alt><SPAN> string Arguments = context.Request.QueryString[</SPAN><SPAN class=string>"ar"</SPAN><SPAN>]; </SPAN><SPAN class=comment>//开始调用方法 </SPAN><SPAN> </SPAN><LI><SPAN> Type type = Type.GetType(AssemblyName); </SPAN><LI class=alt><SPAN> MethodInfo method = type.GetMethod(methodName, </SPAN><LI><SPAN> </SPAN><LI class=alt><SPAN> BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance); </SPAN><LI><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN> (method != </SPAN><SPAN class=keyword>null</SPAN><SPAN>) </SPAN><LI class=alt><SPAN> { </SPAN><LI><SPAN class=comment>//参数使用","分隔 </SPAN><SPAN> </SPAN><LI class=alt><SPAN>string[] args = Arguments.Split(</SPAN><SPAN class=string>","</SPAN><SPAN>.ToCharArray()); </SPAN><LI><SPAN>ParameterInfo[] paras = method.GetParameters(); </SPAN><LI class=alt><SPAN>object[] argument = </SPAN><SPAN class=keyword>new</SPAN><SPAN> object[paras.Length]; </SPAN><LI><SPAN class=keyword>for</SPAN><SPAN> (</SPAN><SPAN class=keyword>int</SPAN><SPAN> i = 0; i < argument.Length; i++) </SPAN><LI class=alt><SPAN>{ </SPAN><LI><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN> (i < args.Length) { </SPAN><LI class=alt><SPAN class=comment>//因为XmlHttp传递过来的参数全部时String类型,所以必须进行转换 </SPAN><SPAN> </SPAN><LI><SPAN class=comment>//这里只将参数转换为Int32,并不做其他考虑。 </SPAN><SPAN> </SPAN><LI class=alt><SPAN>argument[i] = Convert.ToInt32(args[i]); </SPAN><LI><SPAN> } </SPAN><LI class=alt><SPAN>} </SPAN><LI><SPAN>object value = method.Invoke(Activator.CreateInstance(type, </SPAN><SPAN class=keyword>true</SPAN><SPAN>), argument); </SPAN><LI class=alt><SPAN class=keyword>if</SPAN><SPAN> (value != </SPAN><SPAN class=keyword>null</SPAN><SPAN>) context.Response.Write(value.ToString()); </SPAN><LI><SPAN class=keyword>else</SPAN><SPAN> context.Response.Write(</SPAN><SPAN class=string>"error"</SPAN><SPAN>); </SPAN><LI class=alt><SPAN> } </SPAN><LI><SPAN> </SPAN><SPAN class=comment>//处理结束 </SPAN><SPAN> </SPAN><LI class=alt><SPAN> context.Response.End(); </SPAN><LI><SPAN>} </SPAN></LI></OL></PRE><P><div class="thisPageNav"><a href="article/107.html"><strong>第1页</strong></a> <a href="article/107_2.html">第2页</a> </div></div></td>
</tr>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -