|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在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是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。 |
|