Ajax的筆記

來源:互聯網
上載者:User

標籤:ber   click   margin   大量   需要   web應用   編寫   win   動態   

Ajax指非同步JavaScript及XML(Asynchronous JavaScipt And XML),是一種非同步互動式網頁開發技術,用於建立快速動態網頁。與伺服器進行少量資料交換中,Ajax可以使網頁實現非同步更新,這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。

97年微軟便發明了ajax的關鍵技術,並且在99年用於IE5中,但可惜因為其它原因沒有被推廣擱置了起來,ajax技術的流行得益於google的大力推廣。Ajax的核心是JavaScript對象XmlHttpRequest,是一種支援非同步請求的技術,它的意義有:1.在不重新載入頁面的情況下更新網頁。2.在頁面已載入後從伺服器請求資料。3.在頁面已載入後從伺服器接收資料。4.在後台向伺服器發送資料。需要注意的是AJAX不是一種新的程式設計語言,而是一種用於建立更好更快以及互動性更強的Web應用程式的技術。

 

1.AJAX的工作原理:

Ajax的工作原理相當於在使用者和伺服器之間加了—個中介層(AJAX引擎),使使用者操作與伺服器響應非同步化。並不是所有的使用者請求都提交給伺服器,像—些資料驗證和資料處理等都交給Ajax引擎自己來做, 只有確定需要從伺服器讀取新資料時再由Ajax引擎代為向伺服器提交請求。

 

2.Ajax的優點:

1.最大的一點是頁面無重新整理,使用者的體驗非常好。

2.使用非同步方式與伺服器通訊,具有更加迅速的響應能力。

3.可以把以前一些伺服器負擔的工作轉嫁到用戶端,利用用戶端閑置的能力來處理,減輕伺服器和頻寬的負擔,節約空間和寬頻租用成本。並且減輕伺服器的負擔,ajax的原則是“按需取資料”,可以最大程度的減少冗餘請求,和響應對伺服器造成的負擔。

4.基於標準化的並被廣泛支援的技術,不需要下載外掛程式或者小程式。

5.Ajax使WEB中的介面與應用分離(也可以說是資料與呈現分離),有利於分工合作、減少非技術人員對頁面的修改造成的WEB應用程式錯誤、提高效率、也更加適用於現在的發布系統。

 

3.Ajax的缺點:

1、ajax不支援瀏覽器back按鈕。

2、安全問題 AJAX暴露了與伺服器互動的細節。

3、對搜尋引擎的支援比較弱。

4、破壞了程式的異常機制。

5、不容易調試。

 

4.XmlHttpRequest對象的屬性和方法:

屬性

說明

readyState

存有 XMLHttpRequest 的狀態。從0到4發生變化。

0: 請求未初始化

1: 伺服器串連已建立

2: 請求已接收

3: 請求處理中

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

Onreadystatechange

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

responseText

伺服器響應的常值內容

responseXML

伺服器響應的XML內容對應的DOM對象

Status

伺服器返回的http狀態代碼。200表示“成功”,404表示“未找到”,500表示“伺服器內部錯誤”等。

statusText

伺服器返回狀態的文本資訊。

 

 

方法

說明

Open(string method,string url,boolean asynch,

String username,string password)

指定和伺服器端互動的HTTP方法,URL地址,即其他請求資訊;

Method:表示http要求方法,一般使用"GET","POST".

url:表示請求的伺服器的地址;

asynch:表示是否採用非同步方法呼叫,true為非同步,false為同步;

後邊兩個可以不指定,username和password分別表示使用者名稱和密碼,提供http認證機制需要的使用者名稱和密碼。

Send(content)

向伺服器發出請求,如果採用非同步方式,該方法會立即返回。

content可以指定為null表示不發送資料,其內容可以是DOM對象,輸入資料流或字串。

SetRequestHeader(String header,String Value)

設定HTTP請求中的指定頭部header的值為value.

此方法需在open方法以後調用,一般在post方式中使用。

getAllResponseHeaders()

返回包含Http的所有回應標頭資訊,其中相應頭包括Content-length,date,uri等內容。

傳回值是一個字串,包含所有頭資訊,其中每個鍵名和索引值用冒號分開,每一組鍵之間用CR和LF(斷行符號加分行符號)來分隔!

getResponseHeader(String header)

返回HTTP回應標頭中指定的鍵名header對應的值

Abort()

停止當前http請求。對應的XMLHttpRequest對象會複位到未初始化的狀態。

 

 

上面瞭解了Ajax以及工作原理和XmlHttpRequest對象的屬性和方法,那我們該怎麼樣來使用它呢?這裡我分來五步來實現。

 

第一步:建立XmlHttpRequest對象:

1234567 var xmlhttp = null;//XMLHttpRequest IE6是有相容問題的,可以判斷ie6的 ActiveXObject(‘Microsoft.XMLHTTP‘)if(window.XMLHttpRequest){    xmlhttp =new XMLHttpRequest();//除了IE6以外的瀏覽器}else{    xmlhttp =new ActiveXObject("Microsoft.XMLHTTP");//IE6瀏覽器}

 

第二步:指定連結地址:

1 var url=‘demo.php‘

 

第三步:發送資源請求給伺服器。

使用xmlhttprequest對象的open()和send()方法發送資源請求給伺服器。

xmlhttp.open(method,url,async) method包括get和post,url主要是檔案或資源的路徑,async參數為true(代表非同步)或者false(代表同步)

xmlhttp.send();使用get方法發送請求到伺服器。

xmlhttp.send(string);使用post方法發送請求到伺服器。

 

post 發送請求什麼時候能夠使用呢?

(1)更新一個檔案或者資料庫的時候。

(2)發送大量資料到伺服器,因為post請求沒有字元限制。

(3)發送使用者輸入的加密資料。

 

get例子:

1234 xmlhttp.open("GET""ajax_info.txt"true);xmlhttp.open("GET""index.html"true);xmlhttp.open("GET""demo_get.asp?t=" + Math.random(), true);xhttp.send();xmlhttp.send(null);//傳遞參數用的,但是只有在使用post方式提交請求的時候才有用

post例子:

12 xmlhttp.open("POST""demo_post.asp"true);xmlhttp.send();

post表單例子:

123 xmlhttp.open("POST""ajax_test.aspx"true);xmlhttp.setRequestHeader("Content-type""application/x-www-form-urlencoded");xmlhttp.send("fname=Henry&lname=Ford");

 

第四步:伺服器響應

使用xmlhttprequest對象的responseText或responseXML屬性獲得伺服器的響應。

responseText:獲得字串形式的響應資料。

responseXML:獲得 XML 形式的響應資料。

 

如果來自伺服器的響應並非 XML,請使用responseText屬性。

responseText 屬性返回字串形式的響應,因此可以這樣使用:

responseText例子:

1 document.getElementById("demo").innerHTML=xmlhttp.responseText;

 

如果來自伺服器的響應是 XML,而且需要作為 XML 對象進行解析,請使用 responseXML 屬性:

responseXML例子:

1234567 xmlDoc = xhttp.responseXML;txt = "";x = xmlDoc.getElementsByTagName("ARTIST");for (i = 0; i < x.length; i++) {txt += x[i].childNodes[0].nodeValue + "<br>";}document.getElementById("demo").innerHTML = txt;

 

第五步:onreadystatechange函數的使用

onreadystatechange函數,當發送請求到伺服器,我們想要伺服器響應執行一些功能就需要使用onreadystatechange函數,每次xmlhttprequest對象的readyState發生改變都會觸發onreadystatechange函數。

onreadystatechange屬性儲存區一個當readyState發生改變時自動被調用的函數。

readyState屬性,XMLHttpRequest對象的狀態,改變從0到4,0代表請求未被初始化,1代表格服務器串連成功,2請求被伺服器接收,3處理請求,4請求完成並且響應準備。

status屬性,200表示成功響應,404表示頁面不存在。

在onreadystatechange事件中,伺服器響應準備的時候發生,當readyState==4和status==200的時候伺服器響應準備。

 

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

 

使用回呼函數 

 

回呼函數是一種以參數形式傳遞給另一個函數的函數。

如果您的網站上存在多個 AJAX 任務,那麼您應該為建立 XMLHttpRequest 對象編寫一個標準的函數,並為每個 AJAX 任務調用該函數。

該函數調用應該包含 URL 以及發生 onreadystatechange 事件時執行的任務(每次調用可能不盡相同):

1234567 function myFunction(){    loadXMLDoc("/try/ajax/ajax_info.txt",function()    {        if (xmlhttp.readyState==4 && xmlhttp.status==200)        {            document.getElementById("demo").innerHTML=xmlhttp.responseText;        }    });}

 

在實際的運用中,嘗試利用事件+ajax 給button綁定點擊事件,然後執行ajax。

 

server.php

 

<?php if (isset($_POST[‘action‘])){switch($_POST[‘action‘]){case "btn1":btn1();break;case "btn2":btn2();break;default:break;}}function btn1(){echo "hello 按鈕1";}function btn2(){echo "hello 按鈕2";}?>


 

方式:index.php

 

<html><head><style>div {width:600px;margin:200px auto;}.btn {background-color:#44c767;-moz-border-radius:28px;-webkit-border-radius:28px;border-radius:28px;border:1px solid #18ab29;display:inline-block;cursor:pointer;color:#ffffff;font-family:Arial;font-size:17px;padding:16px 31px;text-decoration:none;text-shadow:0px 1px 0px #2f6627;}.btn:hover {background-color:#5cbf2a;}.btn:active {position:relative;top:1px;}#btn2 {float:right;}</style><script type="text/javascript" language="javascript">var xmlHttp;  function createXMLHttpRequest(){ //檢查瀏覽器是否支援 XMLHttpRequest 對象if(window.ActiveXObject){  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  }  else if(window.XMLHttpRequest){  xmlHttp = new XMLHttpRequest();  }  }  function fun(n){  createXMLHttpRequest();  var url="server.php";  xmlHttp.open("POST",url,true); xmlHttp.setRequestHeader(‘Content-type‘, ‘application/x-www-form-urlencoded‘);xmlHttp.onreadystatechange = callback;  xmlHttp.send("action=" + n.value);  }  function callback(){  if(xmlHttp.readyState == 4){  if(xmlHttp.status == 200){  alert(xmlHttp.responseText);   }  }  } </script></head><body><div><button type="button" class="btn" id="btn1" onclick="fun(this)" value="btn1">按鈕1</button><button type="button" class="btn" id="btn2" onclick="fun(this)" value="btn2">按鈕2</button></div></body></html>

 

Ajax的筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.