您好,登錄后才能下訂單哦!
這篇文章主要講解了“什么是XMLHttpRequest對象”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“什么是XMLHttpRequest對象”吧!
首先當(dāng)然是要了解一下瀏覽器中的XMLHttp對象了:
XMLHTTP方法:
備注:客戶機可以使用XMLHTTP對象發(fā)送任意的HTTP請求,接受HTTP應(yīng)答,還可以對應(yīng)答的XML文檔進行解析。
Open方法:初始化一個Msxml2.XMLHTTP請求,指定HTTP請求方式、URL以及鑒定信息。
語法:
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
參數(shù)介紹:
bstrMethod: 數(shù)據(jù)傳送方式,即GET或POST。
bstrUrl: 服務(wù)網(wǎng)頁的URL。
varAsync: 是否同步執(zhí)行。缺省為True,即同步執(zhí)行,但只能在DOM中實施同步執(zhí)行。用中一般將其置為False,即異步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
Send方法:發(fā)送HTTP請求到服務(wù)器,返回應(yīng)答。
語法:
oXMLHttpRequest.send(varBody)
說明:此方法是否同步取決于Open方法的varAsync參數(shù)。如果設(shè)為True則為同步,調(diào)用立刻返回,如果設(shè)為False調(diào)用直到整個應(yīng)答被接收了才返回。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 頭(header)
bstrvalue: HTTP 頭(header)的值
如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
XMLHTTP屬性:
onreadystatechange:在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
responseBody: 結(jié)果返回為無符號整數(shù)數(shù)組。
responseStream: 結(jié)果返回為IStream流。
responseText : 結(jié)果返回為字符串。
responseXML: 結(jié)果返回為XML格式數(shù)據(jù)。
運用這個原理也可以做網(wǎng)絡(luò)小偷程序,網(wǎng)絡(luò)爬蟲應(yīng)該就是應(yīng)用這個東西來完成的吧,不過我沒有做過,可能在不久的將來會制作個來玩玩,這里我們最主要的是看看CS中是如何封裝他的:
1//Ajax Start
2/**////<summary>
3///創(chuàng)建回調(diào)對象,如果存在window.XMLHttpRequest()對象,則返回此對象,如果是IE則搜索Msxml2.XMLHTTP各個版本及Microsoft.XMLHTTP并創(chuàng)建對象返回。
4///</summary>
5function Ajax_GetXMLHttpRequest() {
6 if (window.XMLHttpRequest) {
7 return new XMLHttpRequest();
8 } else {
9 if (window.Ajax_XMLHttpRequestProgID) {
return new ActiveXObject(window.Ajax_XMLHttpRequestProgID);
} else {
var progIDs = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
for (var i = 0; i < progIDs.length; ++i) {
var progID = progIDs[i];
try {
var x = new ActiveXObject(progID);
window.Ajax_XMLHttpRequestProgID = progID;
return x;
} catch (e) {
}
}
}
}
return null;
}
/**////<summary>
///Ajax回調(diào)。
///</summary>
///<param name="type">調(diào)用服務(wù)端函數(shù)所在的類包括命名空間(如:NExplus.Controls.SiteHeader)。</param>
///<param name="id">客戶端所對應(yīng)的標(biāo)記的ID(如:<div id="ID"></div>)。</param>
///<param name="method">服務(wù)端(方法)函數(shù)名稱(被AjaxMethod標(biāo)記)。</param>
///<param name="args">傳到服務(wù)器的字符串。</param>
///<param name="clientCallBack">同步或異步回調(diào)。</param>
///<param name="debugRequestText">調(diào)試/請求字符串。</param>
///<param name="debugResponseText">調(diào)試/輸出字符串。</param>
///<param name="debugErrors">調(diào)試的錯誤信息。</param>
///<param name="includeControlValuesWithCallBack">是否和控件及其值一起回調(diào)。</param>
///<param name="url">Url地址。</param>
function Ajax_CallBack(type, id, method, args, clientCallBack, debugRequestText, debugResponseText, debugErrors, includeControlValuesWithCallBack, url) {
if (!url)
{
url = window.location.href;
url = url.replace(/\#.*$/, '');//去除URL中標(biāo)簽部分,即"#"之后的字符串。
//加入?yún)?shù)Ajax_CallBack并設(shè)為true,說明是AJAX回調(diào)。
if (url.indexOf('?') > -1)
url += "&Ajax_CallBack=true";
else
{
if (url.substr(url.length - 1, 1) == "/")
url += "default.aspx";
url += "?Ajax_CallBack=true";
}
}
var x = Ajax_GetXMLHttpRequest();//取得XMLHttpRequest對象。
var result = null;
if (!x) {
result = { "value":null, "error": "NOXMLHTTP"};
if (debugErrors) {
alert("error: " + result.error);
}
if (clientCallBack) {
clientCallBack(result);
}
return result;
}
x.open("POST", url, clientCallBack ? true : false);//以Post方式打開對象,這樣在服務(wù)端就可以用Request.Form獲取參數(shù)。
x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
if (clientCallBack) {
//如果同步,判斷狀態(tài),輸出錯誤消息。
x.onreadystatechange = function() {
var result = null;
if (x.readyState != 4) {
return;
}
if (debugResponseText) {
alert(x.responseText);
}
try
{
var result = eval("(" + x.responseText + ")");
if (debugErrors && result.error) {
alert("error: " + result.error);
}
}
catch (err)
{
if (window.confirm('The following error occured while processing an AJAX request: ' + err.message + '\n\nWould you like to see the response?'))
{
var w = window.open();
w.document.open('text/plain');
w.document.write(x.responseText);
w.document.close();
}
result = new Object();
result.error = 'An AJAX error occured. The response is invalid.';
}
clientCallBack(result);
}
}
var encodedData = "Ajax_CallBackType=" + type;
if (id) {
encodedData += "&Ajax_CallBackID=" + id.split("$").join(":");
}
encodedData += "&Ajax_CallBackMethod=" + method;
if (args) {
for (var i in args) {
encodedData += "&Ajax_CallBackArgument" + i + "=" + encodeURIComponent(args[i]);
}
}
//如果加入控件,則加入控件數(shù)據(jù)。
if (includeControlValuesWithCallBack && document.forms.length > 0) {
var form = document.forms[0];
for (var i = 0; i < form.length; ++i) {
var element = form.elements[i];
if (element.name) {
var elementValue = null;
if (element.nodeName == "INPUT") {
var inputType = element.getAttribute("TYPE").toUpperCase();
if (inputType == "TEXT" || inputType == "PASSWORD" || inputType == "HIDDEN") {
elementValue = element.value;
} else if (inputType == "CHECKBOX" || inputType == "RADIO") {
if (element.checked) {
elementValue = element.value;
}
}
} else if (element.nodeName == "SELECT") {
elementValue = element.value;
} else if (element.nodeName == "TEXTAREA") {
elementValue = element.value;
}
if (elementValue) {
encodedData += "&" + element.name + "=" + encodeURIComponent(elementValue);
}
}
}
}
//如果是調(diào)試,則彈出發(fā)送的數(shù)據(jù)。
if (debugRequestText) {
alert(encodedData);
}
x.send(encodedData);//向服務(wù)器發(fā)送數(shù)據(jù)。
if (!clientCallBack) {
if (debugResponseText) {
alert(x.responseText);
}
result = eval("(" + x.responseText + ")");
if (debugErrors && result.error) {
alert("error: " + result.error);
}
}
delete x;
return result;
}
//Ajax End
感謝各位的閱讀,以上就是“什么是XMLHttpRequest對象”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對什么是XMLHttpRequest對象這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。