深爱那片海 发表于 2015-1-16 22:49:37

ASP.NET教程之用.net 处置xmlHttp发送异步哀求

在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。xml|哀求|异步比来正在拜读<<AjaxinAction>>这本书,使用书中常识,分离.net,写了这篇用.net处置xmlHttp发送异步哀求的文章。
我们要到达的目标是点击按钮,取得服务器确当前工夫,aspx的html以下:
Html
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="Linkedu.Web.WebWWW.Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>测试</title>
<scriptlanguage="javascript"src="javascript/prototype/extras-array.js"></script>
<scriptlanguage="javascript"src="javascript/xmlHttp.js"></script>
<scriptlanguage="javascript"src="javascript/eventRouter.js"></script>
<scriptlanguage="javascript"src="Default.js"></script>
<scriptlanguage="javascript">

</script>
</head>
<body>
<formid="form1"runat="server">
用Post体例取得服务器确当前工夫
<inputid="btnTestPost"type="button"value="Post"/>
用Get体例取得服务器确当前工夫
<inputid="btnTestGet"type="button"value="Get"/>
<divid="divResult"></div>
</form>
</body>
</html>
要用javascript发送xmlHttp哀求必需办理的成绩是跨扫瞄器的撑持。我们把xmlHttp的发送封装在一个javascript工具中,同时在这个工具中办理了跨扫瞄器撑持的成绩。代码以下:
xmlHttp工具
/**//*
url-loadingobjectandarequestqueuebuiltontopofit
*/
/**//*namespacingobject*/
varnet=newObject();
net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;

/**//*---contentloaderobjectforcross-browserrequests---*/
net.xmlHttp=function(url,onload,params,method,contentType,onerror){
this.req=null;
this.onload=onload;
this.onerror=(onerror)?onerror:this.defaultError;
if(typeof(method)=="undefined"||method==null)
{
method="POST";
}
this.loadXMLDoc(url,params,method,contentType);
}
net.xmlHttp.prototype.loadXMLDoc=function(url,params,method,contentType){
if(!method){
method="GET";
}
if(!contentType&&method=="POST"){
contentType=application/x-www-form-urlencoded;
}
if(window.XmlHttpRequest){
this.req=newXmlHttpRequest();
}elseif(window.ActiveXObject){
this.req=newActiveXObject("Microsoft.xmlHttp");
}
if(this.req){
try{
varloader=this;
this.req.onreadystatechange=function(){
net.xmlHttp.onReadyState.call(loader);
}
this.req.open(method,url,true);
if(contentType){
this.req.setRequestHeader(Content-Type,contentType);
}
this.req.send(params);
}catch(err){
this.onerror.call(this);
}
}
}

net.xmlHttp.onReadyState=function(){
varreq=this.req;
varready=req.readyState;
if(ready==net.READY_STATE_COMPLETE){
varhttpStatus=req.status;
if(httpStatus==200||httpStatus==0){
this.onload.call(this);
}else{
this.onerror.call(this);
}
}
}
net.xmlHttp.prototype.defaultError=function(){
alert("errorfetchingdata!"
+"

readyState:"+this.req.readyState
+"
status:"+this.req.status
+"
headers:"+this.req.getAllResponseHeaders());
}
上面入手下手写发送xmlHttp哀求的代码:
default.js
//全局xmlHttp工具
varcobj;
/**//*Postbegin*/
//绑定Post发送xmlHttp事务到btnTestPost
functionloadTestPost()
{
variobj=document.getElementById("btnTestPost");
//btnTestPost按钮监听的绑定
varclickRouter=newjsEvent.EventRouter(iobj,"onclick");
clickRouter.addListener(btnTestPostClick);
}
functionbtnTestPostClick()
{//open参数url,onload,params,method,contentType,onerror
cobj=newnet.xmlHttp("DefaultHandler.ashx",dealResult,"<T/>","POST");
}
/**//*Postend*/

/**//*Getbegin*/
//绑定Get发送xmlHttp事务到btnTestGet
functionloadTestGet()
{
variobj=document.getElementById("btnTestGet");
//btnTestGet按钮监听的绑定
varclickRouter=newjsEvent.EventRouter(iobj,"onclick");
clickRouter.addListener(btnTestGetClick);
}
functionbtnTestGetClick()
{//open参数url,onload,params,method,contentType,onerror
cobj=newnet.xmlHttp("DefaultHandler.ashx?T=1",dealResult,null,"GET");
}
/**//*Getend*/
functiondealResult()
{
vardobj=document.getElementById("divResult");
dobj.innerHTML=cobj.req.responseXML.text;
}

window.onload=function()
{
//绑定Post发送xmlHttp事务到btnTestPost
loadTestPost();
//绑定Get发送xmlHttp事务到btnTestGet
loadTestGet();
};
最初是.net处置xmlHttp的代码
.net处置xmlHttp哀求
publicclassDefaultHandler:IHttpHandler
{
protectedXmlDocument_xmlResult;
publicvoidProcessRequest(HttpContextcontext)
{
if(context.Request["T"]!=null)
{//GETxmlhttp测试
context.Response.ContentType="text/xml";
XmlDocumentxmlDoc=newXmlDocument();
xmlDoc.LoadXml(string.Format(@"<time>GET:{0}</time>",System.DateTime.Now));
xmlDoc.Save(context.Response.OutputStream);
context.Response.End();
}
else
{//POSTxmlhttp测试
context.Response.ContentType="text/xml";
XmlDocumentxmlDoc=newXmlDocument();
xmlDoc.Load(context.Request.InputStream);
if(xmlDoc.DocumentElement.Name=="T")
{
xmlDoc.LoadXml(string.Format(@"<time>POST:{0}</time>",System.DateTime.Now));
xmlDoc.Save(context.Response.OutputStream);
context.Response.End();
}
}
}
publicboolIsReusable
{
get
{
returnfalse;
}
}
}
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。

不帅 发表于 2015-1-20 05:15:19

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

活着的死人 发表于 2015-1-28 17:32:09

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

只想知道 发表于 2015-2-5 22:20:31

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

冷月葬花魂 发表于 2015-2-13 22:46:26

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

仓酷云 发表于 2015-3-4 02:40:17

众所周知,Windows以易用而出名,也因此占据不少的服务器市场。

飘飘悠悠 发表于 2015-3-11 15:31:21

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

小妖女 发表于 2015-3-19 01:24:13

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

金色的骷髅 发表于 2015-3-27 01:09:12

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
页: [1]
查看完整版本: ASP.NET教程之用.net 处置xmlHttp发送异步哀求