首先當然是要了解一下瀏覽器中的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(如:<pid="ID"></p>)。</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+'\n\nWouldyouliketoseetheresponse?'))
{
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
感謝各位的閱讀,以上就是“什么是XMLHttpRequest對象”的內容了,經過本文的學習后,相信大家對什么是XMLHttpRequest對象這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是本站,小編將為大家推送更多相關知識點的文章,歡迎關注!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
近日,網絡名人新友志收到7000萬雪花,邀請42位大牌明星舉辦豪華演唱會的消息成為網絡熱門話題。當然,這么大的手筆可以說是相當驚人了。畢竟這么大的一筆錢,就算是浙江衛視和湖南衛視也要認真考慮一下。最重要的是這么多明星聚集在一起,沒有硬實力是絕對不行的。當然,楚和辛酉之確實很有商業頭腦??梢哉f他們從這個活動中賺了不少錢。很多人也有疑惑。他們不是說有7000多萬嗎?你是怎么回到本身邊的?這里有一個門。...
95134是中國建設銀行的信用卡外呼客服專用號碼,客服會經過這一電話聯系顧客,-般是告知顧客一些相應的信息,客戶假如無法接通的話,驢可以回撥咨詢一下,以防錯過了要信息。以上就是建行95134是什么電話的相關內容。建行24小時人工電話怎么轉接1、建行人工客服是有固定的在線時間的,客服是24個小時都在線上的,用戶最好是早上九點至下午五點之間撥打;2、用戶可以打開手機上的”電話”...
子公司是在國際商務中指由母公司投入全部或部分股份,依法在世界各地設立的東道國法人企業。子公司在法律上獨立于母公司,并擁有獨立而完整的公司管理組織體系,因而在經營方面具有較大的獨立性和一定的靈活性。那么,參股子公司是什么意思?參股與控股有什么不同?小編為您解答。參股公司是指母公司參股的企業以及全資子公司控股、參股的企業。參股公司相對于控股公司來說:控股公司是指通過持有某一公司一定數量的股份,而對該公...