服务器XMLHTTP(Server XMLHTTP in ASP)基础
近几年很流行 Ajax,而 Ajax 的本质就是 XMLHttpRequest,是客户端 XMLHttpRequest 对象的使用。相对于 Ajax,服务端 XMLHTTP 就是在服务端使用 XMLHttpRequest 对象了。虽然说,在服务端使用异步请求是比较不方便的,但是做为可以服务端发送 HTTP 请求的组件,学习一下也是没有坏处的。
这里,我讲的是在 ASP 环境中使用服务端 XMLHttpRequest,并以 JScript 做为演示代码的语言,因此,你需要了解 ASP 以及 JScript。
服务端 XMLHTTP,通常会用在获取远程主机的网页或者其他内容,新闻聚合系统一般就是使用服务端 XMLHTTP 对象来获取要聚合的 Feed 的内容,然后使用 XMLDOM 对象来分析 Feed 的内容,取出新闻的标题、作者、内容等信息,再存在数据库中,然后将若干个数据源的新闻一起显示在一起。抓虾就是这样一个新闻聚合器,但是它不是用 ASP 写的就是了 :)
在 ASP 中,我们可以用以下代码来创建一个 ServerXMLHTTP 对象,而这个对象,就是我们在服务端进行一切操作的基础。
- // demo code from xujiwei
- // @website: http://www.xujiwei.cn/
- var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");
首先来了解一下 ServerXMLHTTP 对象有哪些比较有用的方法
:
1. abort
这个方法用于取消 XMLHTTP 的请求。如果 XMLHTTP 对象以异步方式发送请求,如果到达一定的时间请求仍然没有返回,就可以使用这个方法来取消请求。
2. getAllResponseHeaders
这个方法的返回值是一个字符串,相当于 HTTP 请求的头部去掉了请求方法、URI和协议版本信息。
3. getResponseHeader
这个方法用来获取指定头部信息,比较有用的就是可以用来获取返回数据的 Content-Type、Referer 等。
4. open
使用指定的请求方法、URI和同步方式以及认证信息等初始化一个请求。
5. send
发送 HTTP 请求,等待接收响应数据,注意,如果是以同步方式发送请求,send方法调用后不会立即返回,而是等到请求完成后才会返回,而以异步方法请求时,则会立即返回。另外,send方法带有一个可选参数body,表示要发送的数据,这在使用 POST 方法时比较有用。
6. setTimeout
设置 ServerXMLHTTP 对象的 4 个超时时间,分别是:域名解析、连接服务器、发送数据、接收响应。可以通过设置相应的超时时间来控制 ServerXMLHTTP 对象,以免 ServerXMLHTTP 不能及时返回而造成程序停止响应。
7. setRequestHeader
设置请求的 Header,在客户端 XMLHttpRequest中,通常用来设置请求的数据类型,或者标识请求的方法等等,例如 jquery 会增加头部标识 X-Request-With,表示请求是从 XMLHttpRequest 对象发出,以方便服务端做出相应的动作。
8. waitForResponse
在使用异步方式发送请求时,可以用这个方法来控制请求的进程。在服务端脚本中,不可以像客户端那样直接
使用回调函数来控制异步请求,也没有相应的函数来使用程序休眠一定的时间,因此,为了等待请求返回,我们可以使用这个方法来等待一定时间。
另外,还有其他一些方法,如 getOption、setOption、setProxy 等,这些方法用得比较少,因此这里不再介绍,需要了解的朋友可以查阅 MSDN。
接下来,再看看 ServerXMLHTTP 对象的属性
:
1. onreadystatechange
XMLHTTP 对象状态改变时的回调函数,这个属性为异步操作奠定了一个基础,可以让程序在不用查询 XMLHTTP 对象状态的情况获知 XMLHTTP 操作是否已经完成。
2. readyState
XMLHTTP 对象状态,有 5 个值,从 0 到 4,分别代表的意思是:
0 - 未初始化,刚使用 new ActiveXObject("MSXML.ServerXMLHTTP.5.0") 创建时对象所处的状态
1 - 载入中,这个时候,已经调用了 open 方法,但是还没有使用 send 方法发送数据
2 - 已经载入,已经调用了 send 方法发送数据,但是还没有可用的响应流
3 - 正在交互,正在接收数据,这个时候可以使用 responseBody 和 responseText 属性来获取已经得到的部分数据了
4 - 完成请求,全部数据已经接收完成
通常情况下,我们只需要判断一下状态 4 即可,这个时候数据已经全部载入,使用 responseBody 或 responseText 属性就能获取需要的数据。
3. status
HTTP 响应状态码,正常情况应该为 200,如果请求的资源不存在,就会返回 404,还有其他状态码如服务器错误 500 等。
4. statusText
HTTP 响应状态文本,用于描述响应状态码所代表的意思,诸如 200 OK 中的 OK,404 Not Found 中的 Not Found
5. responseBody
响应数据的字节数组,这在 VBScript 里是可以直接使用的,但是在 JScript 里就需要转换过了。
6. responseText
以文本方式获取响应数据
7. responseXML
将响应数据作为一个 XMLDOM 对象来返回,这在请求的数据是一个 XML 文档时特别有用
8. responseStream
响应流对象,这个属性不常用
Microsoft.XMLHttp组件的属性方法
一、使用步骤:
1、创建XMLHTTP对象 //需MSXML4.0支持
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。客户端通过Open命令打开与服务端的服务网页的连接。与普
通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放XMLHTTP对象
二、XMLHTTP方法:
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send( varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
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格式数据。
具体的使用方法
创建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);
%>
附上 api 供需要的朋友下载..
分享到:
相关推荐
下面将详细介绍 XMLHTTPRequest 的基本概念、创建实例的方法以及如何使用其关键属性和方法来完成数据的发送与接收操作。 #### 二、XMLHTTPRequest的创建与初始化 在创建一个 XMLHTTPRequest 对象之前,需要先判断...
XMLHttpRequest(XHR)是JavaScript中一个非常重要的对象,...总的来说,XMLHttpRequest提供了丰富的属性和方法,使我们能够构建功能强大的AJAX应用,实现网页的无刷新交互。理解和掌握这些知识对于前端开发至关重要。
以上就是XMLHttpRequest的主要方法和属性API的详细解释。了解和熟练掌握这些工具是构建交互式Web应用的基础,特别是在进行前端数据获取和更新时。通过合理的使用,开发者可以实现高效的页面动态加载和无刷新操作,极...
总结,"创建XMLHttpRequest对象的方法.rar"这个资源主要介绍了如何在JavaScript中创建并使用XMLHttpRequest对象进行AJAX通信,包括对象创建、状态监听、请求初始化和发送、以及响应处理等关键步骤。在实际项目中,...
XMLHttpRequest对象的常用属性和方法包括: 1. 发起请求和接收响应: - `open(method, url, async, [user], [password])`:初始化一个请求,其中`method`参数是请求类型(如GET、POST、PUT),`url`是请求的URL...
XMLHttpRequest对象的主要属性和方法包括: 1. readyState属性:表示请求的状态,共有5个值,分别对应请求的不同阶段,从0(未初始化)到4(完成)。当状态改变时,会触发onreadystatechange事件。 2. ...
作用:通过读取该属性,从而知道XMLHttpRequest 目前进行到了哪一步 取值: 状态码 名称 描述 0 未初始化 默认状态,XMLHttpRequest刚刚被创建 1 打开 调用了对象的open方法,但还没有调用send. 准备好要请求...
本文档将详细介绍XMLHttpRequest对象的基本知识、属性和方法,并演示如何使用它来进行简单的请求与处理。 #### 二、XMLHttpRequest对象的历史与现状 XMLHttpRequest对象最初由微软公司在Internet Explorer中引入,...
它有几个重要的属性和方法,其中readyState属性描述了请求的当前状态,共有五个阶段(0-4),分别对应请求的不同阶段,如未初始化、发送、接收中和已完成。当readyState发生变化时,会触发onreadystatechange事件,...
**跨平台兼容性**:虽然不同浏览器的实现细节有所差异,但它们提供了相似的功能和方法,确保了跨浏览器的兼容性。W3C组织正致力于XMLHttpRequest对象的标准化,已发布了相关的规范草案,旨在统一其接口和行为。 ###...
Ajax 中的 XMLHttpRequest 对象详解 XMLHttpRequest 对象是 Ajax...XMLHttpRequest 对象是 Ajax 技术的核心,它提供了丰富的属性和方法来实现 HTTP 请求和响应,但是需要注意 IE 的缓存问题、中文乱码问题和版本问题。
XMLHttpRequest对象提供了多个方法和属性来控制请求与响应的流程。 1. **`open()`方法**: - 用途:初始化一个到服务器的新请求。 - 参数: - 第一个参数:请求类型(GET, POST等)。 - 第二个参数:请求的URL...
不同的浏览器对`XMLHTTPRequest`的支持方式略有不同,主要分为两种:IE浏览器和其他非IE浏览器(如Firefox、Chrome等)。 ##### IE浏览器 对于IE浏览器,可以使用`ActiveXObject`来创建`XMLHTTPRequest`对象。 ```...
XHR2(XMLHttpRequest Level 2)支持监控文件上传进度,通过`upload`属性和`progress`事件可以获取上传进度。 11. **abort()方法** 可以使用`abort()`方法取消正在进行的请求。 12. **JSONP支持** 虽然...