AJAX 1 入門

AJAX 1 入門

前端AJAX只寫:

點擊某處運行函數loadXMLDoc()

函數包括髮送請求,接收響應。每個請求對應的服務器端地址url相同或不同。

至於響應是什麼樣的,是後端服務器的事。

 

1.AJAX = Asynchronous JavaScript and XML(異步的JavaScriptXML)。

AJAX 不是新的編程語言,而是一種使用現有標準的新方法。

AJAX 是與服務器交換數據並更新部分網頁的藝術,在不重新加載整個頁面的情況下。

 

2.格式:

<head>

<script type="text/javascript">

function loadXMLDoc() {

.... AJAX script ...

}

</script>

</head>

 

<html>

<body>

<div id="myDiv"><h3>Let AJAX change this text</h3></div>

<button type="button" οnclick="loadXMLDoc()">Change Content</button>                                                         

</body>

</html>

 

3.AJAX script的寫法

創建對象,AJAX需要創建XMLHttpRequest對象。

創建 XMLHttpRequest 對象的語法:

variable=new XMLHttpRequest();

老版本的 Internet Explorer IE5 IE6)使用ActiveX對象:

variable=new ActiveXObject("Microsoft.XMLHTTP");

爲了應對所有的現代瀏覽器,包括 IE5 IE6,代碼如下:                             

var xmlhttp;

if (window.XMLHttpRequest)  {

  // code for IE7+, Firefox, Chrome, Opera, Safari

  xmlhttp=new XMLHttpRequest();

}else  {

  // code for IE6, IE5

  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

 

②向服務器發送請求

如需將請求發送到服務器,我們使用XMLHttpRequest對象的open()send()方法:

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

方法

描述

open(method,url,async)         

規定請求的類型、URL 以及是否異步處理請求。                 

method:請求的類型;GETPOST

url:文件在服務器上的位置

asynctrue(異步)或false(同步)

send(string)

將請求發送到服務器。

string:僅用於 POST請求

GET 還是 POST

POST 相比,GET更簡單也更快,並且在大部分情況下都能用。

然而,在以下情況中,請使用 POST 請求:

無法使用緩存文件(更新服務器上的文件或數據庫)

向服務器發送大量數據(POST 沒有數據量限制)

發送包含未知字符的用戶輸入時,POST GET 更穩定也更可靠

url - 服務器上的文件

open() 方法的 url 參數是服務器上文件的地址。

該文件可以是任何類型的文件,比如.txt.xml,或者服務器腳本文件,比如.asp.php(在傳回響應之前,能夠在服務器上執行任務)。

異步 - TrueFalse

AJAX 指的是異步 JavaScriptXMLAsynchronous JavaScript and XML)。

XMLHttpRequest對象如果要用於AJAX的話,其open()方法的async參數必須設置爲true

 

③接收服務器響應

如需獲得來自服務器的響應,使用XMLHttpRequest對象的responseTextresponseXML屬性。

屬性

描述

responseText                     

獲得字符串形式的響應數據。                                                                                          

responseXML

獲得 XML 形式的響應數據。

 

④onreadystatechange 事件

當請求被髮送到服務器時,我們需要執行一些基於響應的任務。

下面是 XMLHttpRequest 對象的三個重要的屬性:

屬性

描述

onreadystatechange        

存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。     

readyState

存有 XMLHttpRequest 的狀態。從04 發生變化。

0: 請求未初始化

1: 服務器連接已建立

2: 請求已接收

3: 請求處理中

4: 請求已完成,且響應已就緒

status

200: "OK"
404: 未找到頁面

onreadystatechange事件中,我們規定當服務器響應已做好被處理的準備時所執行的任務。當readyState等於4且狀態爲200時,表示響應已就緒:

實例

xmlhttp.onreadystatechange=function()  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }
}

 

⑤使用回調函數

如果您的網站上存在多個 AJAX 任務,那麼您應該爲創建 XMLHttpRequest 對象編寫一個標準的函數,併爲每個AJAX任務調用該函數。該函數調用應該包含URL以及發生onreadystatechange事件時執行的任務(每次調用可能不盡相同):

實例

var xmlhttp;
function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest)
  {// IE7+, Firefox, Chrome, Opera, Safari 代碼
  xmlhttp=new XMLHttpRequest();
  }
else
  {// IE6, IE5 代碼
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function myFunction() {
  loadXMLDoc("ajax_info.txt",function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
  });
}


 

⑥服務器常用的狀態碼及其對應的含義如下:

 200:服務器響應正常。

 304:該資源在上次請求之後沒有任何修改(這通常用於瀏覽器的緩存機制,使用GET請求時尤其需要注意)。

 400:無法找到請求的資源。

 401:訪問資源的權限不夠。

 403:沒有權限訪問資源。

 404:需要訪問的資源不存在。

 405:需要訪問的資源被禁止。

 407:訪問的資源需要代理身份驗證。

 414:請求的URL太長。

 500:服務器內部錯誤。

 

4.實例:

<html>
<head>
  <script type="text/javascript">
  var xmlhttp;
  function loadXMLDoc(url) {
    xmlhttp=null;
if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();  // code for IE7, Firefox, Opera, etc.
}else if (window.ActiveXObject) {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  // code for IE6, IE5
    }
    if (xmlhttp!=null) {
      xmlhttp.onreadystatechange=state_Change;
      xmlhttp.open("GET",url,true);
      xmlhttp.send(null);
    }else {
      alert("Your browser does not support XMLHTTP.");
    }
  }
  
  function state_Change() {  //當服務器響應就緒時,接收服務器響應數據
    if (xmlhttp.readyState==4) {  // 4 = "loaded"
      if (xmlhttp.status==200) {  // 200 = "OK"
        document.getElementById('A1').innerHTML=xmlhttp.status;
        document.getElementById('A2').innerHTML=xmlhttp.statusText;
        document.getElementById('A3').innerHTML=xmlhttp.responseText;
      } else {
        alert("Problem retrieving XML data:" + xmlhttp.statusText);
      }
    }
  }
</script>
</head>
 
<body>
  <h2>Using the HttpRequest Object</h2>
  <p>
    <b>Status:</b><span id="A1"></span>
  </p>
  <p>
    <b>Status text:</b><span id="A2"></span>
  </p>
  <p>
    <b>Response:</b><br />
    <span id="A3"></span>
  </p>
  <button οnclick="loadXMLDoc('/example/xmle/note.xml')">Get XML</button>
</body>
</html>


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章