全面剖析XMLHttpRequest对象(2)

三、 XMLHttpRequest 象的方法

   XMLHttpRequest 象提供了各 方法用于初始化和 HTTP 求,下列将逐个展 开详细讨论

   abort()方法

  你可以使用 abort()方法来 停与一个 XMLHttpRequest 象相 系的 HTTP 求,从而把 该对 位到未初始化状

   open()方法

   你需要 open(DOMString method DOMString uri boolean async DOMString username DOMString password)方法初始化一个 XMLHttpRequest 象。 其中, method 参数是必 提供的 - 用于指定你想用来 求的 HTTP 方法 (GET POST PUT DELETE HEAD) 了把数据 送到服 器, 应该 使用 POST 方法; 了从服 器端 索数据, 应该 使用 GET 方法。 另外, uri 参数用于指定 XMLHttpRequest 象把 送到的服 器相 URI 。借助于 window.document.baseURI 性, uri 被解析 一个 绝对 URI- 话说 ,你可以使用相 URI- 它将使用与 浏览 器解析相 URI 的方式被解析。 async 参数指定是否 求是异 - 缺省 值为 true 送一个同 步请 求,需要把 个参数 false 于要求 认证 的服 器, 你可以提供可 的用 名和口令参数。在 open() 方法后, XMLHttpRequest 象把它的 readyState 属性 1( ) 并且把 responseText responseXML status statusText 属性 位到它 的初始 。另外,它 还复 部。注意,如果你 open() 方法并且此 readyState 4 XMLHttpRequest 象将

   send() 方法

  在通 过调 open() 方法准 好一个 求之后,你需要把 该请 送到服 器。 readyState 值为 1 ,你才可以 send() 方法;否 XMLHttpRequest 象将引 一个异常。 该请 求被使用提供 open() 方法的参数 送到服 器。当 async 参数 true send() 方法立即返回,从而允 其它客 端脚本 继续 。在 send() 方法后, XMLHttpRequest 象把 readyState 值设 2( ) 。当服 器响 应时 ,在接收消息体之前,如果存在任何消息体的 XMLHttpRequest 象将把 readyState 3( 正在接收中 ) 。当 求完 成加 载时 ,它把 readyState 4( 已加 ) 于一个 HEAD 型的 求,它将在把 readyState 值设 3 后再立即把它 4

   send() 方法使用一个可 的参数 - 参数可以包含可 变类 型的数据。典型地,你使用它并通 POST 方法 把数据 送到服 器。另外,你可以 式地使用 null 参数 send() 方法, 与不用参数 用它一 于大多数其它的数据 型,在 send() 方法之前, 应该 使用 setRequestHeader() 方法 ( 后面的解 ) Content-Type 部。如 果在 send(data) 方法中的 data 参数的 DOMString ,那 ,数据将被 编码为 UTF-8 。如果数据是 Document 型,那 将使用由 data.xmlEncoding 指定的 编码 串行化 数据。

   setRequestHeader() 方法

   setRequestHeader(DOMString header DOMString value) 方法用来 求的 部信息。当 readyState 值为 1 ,你可以在 open() 方法后 个方法;否 ,你将得到一个异常。

   getResponseHeader() 方法

   getResponseHeader(DOMString header value) 方法用于 索响 readyState 3 4( 话说 ,在响 应头 部可用以后 ) ,才可以 个方法;否 方法返回一个空字符串。

   getAllResponseHeaders()方法

   getAllResponseHeaders()方法以一个字符串形式返回所有的响 应头 部( 一个 部占 独的一行)。如果 readyState 不是 3 4 则该 方法返回 null

 

 

四、

  在 AJAX中, 多使用 XMLHttpRequest 求都是从一个 HTML事件(例如一个 JavaScript函数的按 (onclick)或一个按 (onkeypress))中被初始化的。 AJAX 支持包括表 在内的各 种应 用程 序。有 ,在填充表 的其它内容之前要求校 一个唯一的表 域。例如要求使用一个唯一的 UserID 来注册表 。如果不是使用 AJAX 来校 验这 UserID 域,那 整个表 都必 被填充和提交。如果 UserID 不是有效的, 个表 被重新提交。例如,一个相 于一个要求必 在服 器端 Catalog ID 的表 域可能按下列形式指定:

form name="validationForm" action="validateForm" method="post"
table
 < tr>< td Catalog Id: /td
  < td
   < input type="text" size="20" id="catalogId" name="catalogId" autocomplete="off" οnkeyup="sendRequest()"
  < /td
  < td>< div id="validationMessage">< /div>< /td
 < /tr
/table>< /form


   前面的 HTML使用 validationMessage div 示相 入域 Catalog Id的一个校 消息。 onkeyup事件 用一个 JavaScript sendRequest()函数。 sendRequest()函数 建一个 XMLHttpRequest 象。 建一个 XMLHttpRequest 象的 程因 浏览 实现 的不同而有所区 。如果 浏览 器支持 XMLHttpRequest 象作 一个窗口属性 ( 所有普通的 浏览 都是 这样 的,除了 IE 5 IE 6 之外 ) ,那 ,代 可以 XMLHttpRequest 的构造器。如果 浏览 器把 XMLHttpRequest 实现为 一个 ActiveXObject ( 就象在 IE 5 IE 6 中一 ) ,那 ,代 可以使用 ActiveXObject 的构造器。下面的函数将 用一个 init() 函数,它 负责检查 并决定要使用的适当的 建方法 - 建和返回 象之前。

script type="text/javascript"
function sendRequest(){
  var xmlHttpReq=init();
  function init(){
   if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
   }
  else if (window.ActiveXObject) {
   return new ActiveXObject("Microsoft.XMLHTTP");
  }
}
/script


  接下来,你需要使用 Open()方法初始化 XMLHttpRequest -指定 HTTP方法和要使用的服 URL

var catalogId=encodeURIComponent(document.getElementById("catalogId").value);
xmlHttpReq.open("GET" "validateForm?catalogId=" + catalogId true);


  默 情况下,使用 XMLHttpRequest 送的 HTTP 求是异 步进 行的,但是你可以 式地把 async 参数 true ,如上面所展示的。
这种 情况下, URL validateForm 用将激活服 器端的一个 servlet ,但是你 应该 注意到服 器端技 不是根本性的; 实际 上, URL 可能是一个 ASP ASP.NET PHP 面或一个 Web - 关紧 要,只要 该页 面能 返回一个响 - 指示 CatalogID 是否是有效的 - 即可。因 你在 作一个异 步调 用,所以你需要注册一个 XMLHttpRequest 象将 用的回 事件 理器 - 当它的 readyState 变时调 用。 住, readyState 的改 将会激 一个 readystatechange事件。你可以使用 onreadystatechange属性来注册 事件 理器。

xmlHttpReq.onreadystatechange=processRequest;


  然后,我 需要使用 send() 方法 该请 求。因 为这 求使用的是 HTTP GET 方法,所以,你可以在不指定参数或使用 null 参数的情况下 send() 方法。

xmlHttpReq.send(null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值