分享错误,学习生活

XMLHttpRequest

导读:
  在Ajax應用程式中,如果是Mozilla/Firefox/Safari中,可以透過XMLHttpRequest來發出非同步請求,如果是在IE6 或IE先前版本,則是使用ActiveXObject來發出非同步請求,為了各個不同瀏覽器間的相容性,必須進行測試可取得XMLHttpRequest 或ActiveXObject,例如:
  var xmlHttp;
  function createXMLHttpRequest() {
  if (window.XMLHttpRequest) { // 如果可以取得XMLHttpRequest
  xmlHttp = new XMLHttpRequest(); // Mozilla、Firefox、Safari
  }
  else if (window.ActiveXObject) { // 如果可以取得ActiveXObject
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
  }}
  這段程式碼可以滿足大部份的瀏覽器,您可以再進一步檢查是否真正生成了物件,例如:
  if(xmlHttp) {
  // do request
  }
  else {
  alert("您的瀏覽器不支援這個Ajax程式的功能");
  }
  在建立XMLHttpRequest之後,則可以使用以下的幾種方法:
  void open(string method, string url, boolean asynch, string username, string password)
  開啟對伺服端的連結;method為請求方式(GET、POST);url為伺服端位址,如果是GET的話,可加上請求參數與值;asynch為非同步設定,預設是true,表示使用非同步方式。
  void send(content)
  對伺服端傳送請求,content這以放XML、輸入串流、字串、JSON格式的內容,放進去會放在POST本體中發送。
  void setRequestHeader(string header, string value)
  為HTTP請求設定一個給定的 header 設定值。
  void abort()
  用來中斷請求。
  string getAllResponseHeaders()
  傳回一個字串,其中包含HTTP請求的所有回應標頭。
  string getResponseHeader(string header)
  傳回一個字串,其中包含指定的回應標頭值。
  XMLHttpRequest包括以下幾個標準屬性:
  onreadystatechange
  參考至callback函式,readyState每次改變時,都會呼叫onreadystatechange所參考的函式。
  readyState
  會有0到4的數值,分別表示不同的請求狀態:
  0 = 未初始化的連線(uninitialized),還沒呼叫open()
  1 = 載入中(loading),呼叫open(),還沒呼叫send()
  2 = 已載入(loaded),呼叫send(),請求header/status準備好
  3 = 互動中(interactive),正在與伺服器互動中
  4 = 請求完成(completed),完成請求
  responseText
  伺服器傳來的請求回應文字,會設定給這個屬性。
  responseXML
  伺服器傳來的請求回應如果是XML,會成為DOM設定給這個屬性。
  status
  伺服器回應的狀態碼,例如200是OK,404為Not Found…
  statusText
  伺服器回應的狀態文字。
  一個基本的Ajax請求可以是以下的片段:
  function startRequest() {
  createXMLHttpRequest(); // 建立非同步請求物件
  xmlHttp.onreadystatechange = handleStateChange; // 設定callback函式
  xmlHttp.open("GET", "simpleResponse.txt"); // 開啟連結
  xmlHttp.send(null); // 傳送請求
  }
  function handleStateChange() { // 在這邊處理非同步回應
  
  }
  當每次readyState改變時,都會呼叫以上程式片段中設定的handleStateChange()函式,通常會在請求完成進行處理,所以您可以如以下的程式片段來處理回應:
  function handleStateChange() {
  if (xmlHttp.readyState == 4) { // 測試狀態是否請求完成
  if (xmlHttp.status == 200) { // 如果伺服端回應OK
  alert("伺服器回應" + xmlHttp.responseText); // 這邊只取得回應文字
  }
  }
  }
  
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1511012

本文转自
http://blog.csdn.net/caterpillar_here/archive/2007/02/16/1511012.aspx

暂无评论

发表评论

电子邮件地址不会被公开。