千家信息网

什么是XMLHttpRequest对象

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要讲解了"什么是XMLHttpRequest对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是XMLHttpRequest对象"吧!首
千家信息网最后更新 2025年02月03日什么是XMLHttpRequest对象

这篇文章主要讲解了"什么是XMLHttpRequest对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是XMLHttpRequest对象"吧!

首先当然是要了解一下浏览器中的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//Ajax Start
2/**////


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

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;
}
/**////
///Ajax回调。
///

///调用服务端函数所在的类包括命名空间(如:NExplus.Controls.SiteHeader)。
///客户端所对应的标记的ID(如:
)。
///服务端(方法)函数名称(被AjaxMethod标记)。
///传到服务器的字符串。
///同步或异步回调。
///调试/请求字符串。
///调试/输出字符串。
///调试的错误信息。
///是否和控件及其值一起回调。
///Url地址。
function Ajax_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";
}
}

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方式打开对象,这样在服务端就可以用Request.Form获取参数。
x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
if (clientCallBack) {
//如果同步,判断状态,输出错误消息。
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.[xss_clean](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]);
}
}
//如果加入控件,则加入控件数据。
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);
}
}
}
}
//如果是调试,则弹出发送的数据。
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);
}
}
delete x;
return result;
}

//Ajax End

感谢各位的阅读,以上就是"什么是XMLHttpRequest对象"的内容了,经过本文的学习后,相信大家对什么是XMLHttpRequest对象这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

对象 同步 服务 方法 字符 字符串 数据 方式 结果 参数 控件 服务器 学习 信息 内容 函数 客户 就是 标记 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全资金对企业的影响 数据库设计实验一及答案 图片怎样保存到远程服务器 网络安全靠人民的绘画作品 软件开发验收分为几次 网络安全形势分析讨论 服务器及网站安全维护费用 数据库查询优化艺术 湖北互联网软件开发有用吗 传奇三怎么从后台进数据库 软件开发和软件开发服务 jdbc编写数据库接口 鸿铭软件开发有限公司骗局 浙江配件管理软件开发公司 清华大学生数据库 现如今网络安全问题 服务器的连接数最多多少 合肥市智慧监管平台网络安全中标 服务器一体机的选择 西安培训教学软件开发 淄博专业软件开发定制 dna打拐数据库找到了多少个 天津多功能软件开发定制价格 网络安全靠人民的绘画作品 x58服务器主板怎么样 互联网科技公司的困局 违反网络安全第三十条是什么 医院his系统用什么数据库 服务器登录注册表怎么更改 中绿网络技术有限公司
0