AJAX客户端说明,XMLHttpRequest对象_AJAX相关教程-查字典教程网
AJAX客户端说明,XMLHttpRequest对象
AJAX客户端说明,XMLHttpRequest对象
发布时间:2016-12-29 来源:查字典编辑
摘要:在CommunityServer中运用了自己的AJAX机制,没有借助其他的辅助控件。其中客户的XMLHttpRequest对象的封装,就足以...

在CommunityServer中运用了自己的AJAX机制,没有借助其他的辅助控件。其中客户的XMLHttpRequest对象的封装,就足以让人大饱眼福,在一般的浏览器其都能够运行AJAX。下面我们来学习学习这个咚咚,希望能给更多的人带来帮助。

首先当然是要了解一下浏览器中的XMLHttp对象了:

XMLHTTP方法:

备注:客户机可以使用XMLHTTP对象发送任意的HTTP请求,接受HTTP应答,还可以对应答的XML文档进行解析。

Open方法:初始化一个Msxml2.XMLHTTP请求,指定HTTP请求方式、URL以及鉴定信息。

语法:

Open(bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword)

参数介绍:

bstrMethod:数据传送方式,即GET或POST。

bstrUrl:服务网页的URL。

varAsync:是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。

bstrUser:用户名,可省略。

bstrPassword:用户口令,可省略。

Send方法:发送HTTP请求到服务器,返回应答。

语法:

oXMLHttpRequest.send(varBody)

说明:此方法是否同步取决于Open方法的varAsync参数。如果设为True则为同步,调用立刻返回,如果设为False调用直到整个应答被接收了才返回。

setRequestHeader(bstrHeader,bstrvalue)

bstrHeader:HTTP头(header)

bstrvalue:HTTP头(header)的值

如果Open方法定义为POST,可以定义表单方式上传:

xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

XMLHTTP属性:

onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。

responseBody:结果返回为无符号整数数组。

responseStream:结果返回为IStream流。

responseText:结果返回为字符串。

responseXML:结果返回为XML格式数据。

运用这个原理也可以做网络小偷程序,网络爬虫应该就是应用这个东西来完成的吧,不过我没有做过,可能在不久的将来会制作个来玩玩,这里我们最主要的是看看CS中是如何封装他的:

1//AjaxStart

2/**////<summary>

3///创建回调对象,如果存在window.XMLHttpRequest()对象,则返回此对象,如果是IE则搜索Msxml2.XMLHTTP各个版本及Microsoft.XMLHTTP并创建对象返回。

4///</summary>

5functionAjax_GetXMLHttpRequest(){

6if(window.XMLHttpRequest){

7returnnewXMLHttpRequest();

8}else{

9if(window.Ajax_XMLHttpRequestProgID){

returnnewActiveXObject(window.Ajax_XMLHttpRequestProgID);

}else{

varprogIDs=["Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];

for(vari=0;i<progIDs.length;++i){

varprogID=progIDs[i];

try{

varx=newActiveXObject(progID);

window.Ajax_XMLHttpRequestProgID=progID;

returnx;

}catch(e){

}

}

}

}

returnnull;

}

/**////<summary>

///Ajax回调。

///</summary>

///<paramname="type">调用服务端函数所在的类包括命名空间(如:NExplus.Controls.SiteHeader)。</param>

///<paramname="id">客户端所对应的标记的ID(如:<divid="ID"></div>)。</param>

///<paramname="method">服务端(方法)函数名称(被AjaxMethod标记)。</param>

///<paramname="args">传到服务器的字符串。</param>

///<paramname="clientCallBack">同步或异步回调。</param>

///<paramname="debugRequestText">调试/请求字符串。</param>

///<paramname="debugResponseText">调试/输出字符串。</param>

///<paramname="debugErrors">调试的错误信息。</param>

///<paramname="includeControlValuesWithCallBack">是否和控件及其值一起回调。</param>

///<paramname="url">Url地址。</param>

functionAjax_CallBack(type,id,method,args,clientCallBack,debugRequestText,debugResponseText,debugErrors,includeControlValuesWithCallBack,url){

if(!url)

{

url=window.location.href;

url=url.replace(/#.*$/,'');//去除URL中标签部分,即"#"之后的字符串。

//加入参数Ajax_CallBack并设为true,说明是AJAX回调。

if(url.indexOf('?')>-1)

url+="&Ajax_CallBack=true";

else

{

if(url.substr(url.length-1,1)=="/")

url+="default.aspx";

url+="?Ajax_CallBack=true";

}

}

varx=Ajax_GetXMLHttpRequest();//取得XMLHttpRequest对象。

varresult=null;

if(!x){

result={"value":null,"error":"NOXMLHTTP"};

if(debugErrors){

alert("error:"+result.error);

}

if(clientCallBack){

clientCallBack(result);

}

returnresult;

}

x.open("POST",url,clientCallBack?true:false);//以Post方式打开对象,这样在服务端就可以用Request.Form获取参数。

x.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

if(clientCallBack){

//如果同步,判断状态,输出错误消息。

x.onreadystatechange=function(){

varresult=null;

if(x.readyState!=4){

return;

}

if(debugResponseText){

alert(x.responseText);

}

try

{

varresult=eval("("+x.responseText+")");

if(debugErrors&&result.error){

alert("error:"+result.error);

}

}

catch(err)

{

if(window.confirm('ThefollowingerroroccuredwhileprocessinganAJAXrequest:'+err.message+'nnWouldyouliketoseetheresponse?'))

{

varw=window.open();

w.document.open('text/plain');

w.document.write(x.responseText);

w.document.close();

}

result=newObject();

result.error='AnAJAXerroroccured.Theresponseisinvalid.';

}

clientCallBack(result);

}

}

varencodedData="Ajax_CallBackType="+type;

if(id){

encodedData+="&Ajax_CallBackID="+id.split("$").join(":");

}

encodedData+="&Ajax_CallBackMethod="+method;

if(args){

for(variinargs){

encodedData+="&Ajax_CallBackArgument"+i+"="+encodeURIComponent(args[i]);

}

}

//如果加入控件,则加入控件数据。

if(includeControlValuesWithCallBack&&document.forms.length>0){

varform=document.forms[0];

for(vari=0;i<form.length;++i){

varelement=form.elements[i];

if(element.name){

varelementValue=null;

if(element.nodeName=="INPUT"){

varinputType=element.getAttribute("TYPE").toUpperCase();

if(inputType=="TEXT"||inputType=="PASSWORD"||inputType=="HIDDEN"){

elementValue=element.value;

}elseif(inputType=="CHECKBOX"||inputType=="RADIO"){

if(element.checked){

elementValue=element.value;

}

}

}elseif(element.nodeName=="SELECT"){

elementValue=element.value;

}elseif(element.nodeName=="TEXTAREA"){

elementValue=element.value;

}

if(elementValue){

encodedData+="&"+element.name+"="+encodeURIComponent(elementValue);

}

}

}

}

//如果是调试,则弹出发送的数据。

if(debugRequestText){

alert(encodedData);

}

x.send(encodedData);//向服务器发送数据。

if(!clientCallBack){

if(debugResponseText){

alert(x.responseText);

}

result=eval("("+x.responseText+")");

if(debugErrors&&result.error){

alert("error:"+result.error);

}

}

deletex;

returnresult;

}

//AjaxEnd

其他的不用多说明了,看注释应该就差不多了,如果有不对的地方请批评指教,谢谢!

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新AJAX相关学习
    热门AJAX相关学习
    编程开发子分类