XMLHTTP介绍

创建XMLHTTP对象的语句如下:

 
Set objXML = CreateObject("Msxml2.XMLHTTP") 或
Set objXML = CreateObject("Microsoft.XMLHTTP")
'Or for version 3.0 of XMLHTTP, use:
'Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP") 


对象创建后调用Open方法对Request对象进行初始化,语法格式为: 


objXML.open http-method,url,async,userID,password 



Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:
  
http-method:HTTP的通信方式,比如GET或是POST 
url:接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGI程序 
async:一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作 
userID:用户ID,用于服务器身份验证 
password:用户密码,用于服务器身份验证 

XMLHTTP对象的Send方法

用Open方法对Request对象进行初始化后,调用Send方法发送XML数据: 


objXML.send() 


Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。

发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。

XMLHTTP对象中的readyState属性

其能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示: 


值  说明 
0   Response对象已经创建,但XML文档上载过程尚未结束 
1   XML文档已经装载完毕 
2   XML文档已经装载完毕,正在处理中 
3   部分XML文档已经解析 
4   文档已经解析完毕,客户端可以接受返回消息

 

客户机处理响应信息,客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。 

客户机接收响应是通过XMLHTTP对象的属性实现的:
 
responseText:将返回消息作为文本字符串; 
responseBody:将返回消息作为HTML文档内容;
responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用; 
responseStream:将返回消息视为Stream对象 

以下是一个简单的例子:类似新闻小偷


<%
Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXML.open "GET","http://www.alexa.com",false
objXML.send()
response.write(objXML.responseText)
%>



整个步骤很明显:建立、打开、发送和接受。

p.s.本处调试为alexa站点,如果选择为国内中文站点则会出现乱码,故需要一个函数转换,具体见《 偷也是门技术——浅谈XMLHTTP应用:新闻小偷
 
<think>好的,我现在需要处理用户关于XMLHttpRequest的使用指南和解决方案的请求。首先,用户明确提到了几个引用内容,我需要先仔细阅读这些引用,确保回答准确引用相关内容。 首先,引用[1]提到了XMLHttpRequest的历史和标准化过程,分为Level 1和Level 2。这可能需要在介绍基本概念时引用,说明不同版本的区别。 引用[2]和[3]都涉及POST请求的设置,特别是设置请求头和发送数据。引用[2]展示了如何发送表单格式的数据,而引用[3]则是发送JSON数据,并且提到了预检请求的问题。这部分内容需要详细讲解,包括如何设置Content-Type,以及处理跨域请求时的预检机制。 引用[4]讨论了使用FormData和异步处理远程文件的方法,提到了使用async/await和Promise。这部分可能需要作为解决方案的一部分,特别是在处理文件上传或复杂数据时。 接下来,用户的问题是要查找XMLHttpRequest的使用指南或解决方案。根据用户的引用,他们可能遇到了发送不同格式数据、处理跨域请求或异步文件上传的问题。因此,我需要结构清晰地分步骤说明基本用法、不同数据格式的发送、跨域处理以及常见问题解决方案。 需要确保回答符合系统指令:行内数学公式用$...$,独立公式用$$...$$,但在这个问题中可能用不上数学公式。同时要使用中文,生成相关问题,并正确引用给定的引用内容。 可能需要分几个部分来组织内容: 1. XMLHttpRequest的基本概念和历史(引用[1]) 2. 发送GET和POST请求,包括不同数据格式的设置(引用[2]、[3]) 3. 处理跨域请求和预检机制(引用[3]) 4. 使用FormData处理文件上传和异步数据(引用[4]) 5. 常见问题及解决方案,比如预检请求、异步处理等 在生成相关问题的时候,要考虑用户可能进一步的问题,比如如何发送JSON数据,如何处理跨域错误,或者如何上传文件等。确保每个引用至少被使用一次,同时保持回答的连贯性和实用性。 需要检查是否存在技术错误,比如是否正确区分了Level 1和Level 2的特性,是否正确展示了设置请求头的步骤,以及是否正确处理了异步操作。另外,要确保代码示例正确,比如在发送POST请求时,是否需要先open再setRequestHeader,顺序是否正确,这些都需要验证。 最后,按照用户要求的结构,先回答,再生成相关问题,确保引用标注自然,比如在提到预检请求时引用[3],提到FormData时引用[4]等。</think>### XMLHttpRequest 使用指南与解决方案 #### 一、XMLHttpRequest 基础概念 XMLHttpRequest(XHR)是浏览器提供的用于与服务器交互的API,支持异步数据传输[^1]。其标准化分为Level 1和Level 2,Level 2新增了跨域请求、进度事件等特性[^1]。 #### 二、核心使用方法 1. **GET请求示例** ```javascript const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.example.com/data', true); xhr.onload = function() { if (xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send(); ``` 2. **POST请求(表单格式)** 需设置`Content-Type`并序列化数据: ```javascript xhr.open('POST', '/submit', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 引用[2] xhr.send('username=test&password=123'); ``` 3. **POST请求(JSON格式)** 设置`Content-Type: application/json`时会触发预检请求(OPTIONS)[^3]: ```javascript xhr.open('POST', '/api', true); xhr.setRequestHeader('Content-Type', 'application/json'); // 引用[3] xhr.send(JSON.stringify({ key: 'value' })); ``` #### 三、跨域请求处理 1. **CORS预检机制** 当请求头包含非简单字段(如自定义头或`Content-Type: application/json`)时,浏览器自动发起OPTIONS预检请求[^3]。 2. **服务端配置示例** 需返回以下响应头: ``` Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: Content-Type ``` #### 四、文件上传与FormData 1. **本地文件上传** ```javascript const formData = new FormData(); formData.append('file', fileInput.files[0]); xhr.open('POST', '/upload', true); xhr.send(formData); // 自动设置multipart/form-data ``` 2. **远程文件处理** 使用`async/await`确保异步加载完成: ```javascript async function uploadRemoteFile(url) { const response = await fetch(url); const blob = await response.blob(); const formData = new FormData(); formData.append('file', blob); // 引用[4] xhr.send(formData); } ``` #### 五、常见问题解决方案 | 问题现象 | 解决方案 | |---------|----------| | 跨域请求被拦截 | 检查服务端CORS配置,确保返回正确的响应头[^3] | | 网络请求超时 | 设置`xhr.timeout`属性并监听`ontimeout`事件 | | 大文件上传中断 | 分片上传或使用进度事件监控 | | 旧浏览器兼容性问题 | 使用`ActiveXObject`降级方案 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值