ajax基礎讀書筆記 第一章

1、XMLHttpRequest對象的創建

 

   由於  不是w3c標準,所以使用Javascript創建之的方法也不同!Internet explorer 把XMLHttpRequest實例化爲  ActiveX控件,然而 其他的瀏覽器(FireFox,opera)把XMLHttpRequest實例化爲本地的JavaScript一個對象

所以 只要確定是否  支持 ActiveX控件對象!!如果支持則創建ActiveX控件!  如果不支持,則創建  本地的Javascript對象

 

下面一個代碼:

   var   xmlHttp;

function  createXMLHttpRequest()

{

 

if(window.ActiveXObject)            //則使用的是Internet explorer 瀏覽器

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

else if (window.XMLHttpRequest)

         xmlHttp=new XMLHttpRequest();

 

}

2  XMLHttpRequest 對象的方法

 

 

一:open(String method ,String URL,boolean )

 

method 是表示  提交數據的方法:get  post  put

URL是提交的網址

下面的Boolean  是否設置爲異步,一般  設置爲true 因爲這正是 Ajax的特長  

如果這個參數設置爲false  那處理的請求會一直等待,知道遠程的服務器返回響應!!

 

二;  send (content)

  向服務器發送請求。如果被聲明爲 異步的 。那他會立即返回!否則知道 服務器  返回響應

 參數可選爲  DOM的實例對象  字符串  流

 

三:

 

setRequestHeader(String   Header,String Value)

 

設置http請求

四;

 

abort()終止請求

 

 

五:

 

getAllResponseHeaders()

返回所有響應的首部

 

getAllResponseHeader(String name)

 

另外還有些屬性

 

onreadystatechange
 每個狀態改變時都會觸發這個事件處理器,通常會調用一個JavaScript函數(可以自定義)
 
readyState
 請求的狀態。有5個可取值:0 = 未初始化,1 = 正在加載,2 = 已加載,3 = 交互中,4 = 完成
 
responseText
 服務器的響應,表示爲一個串
 
responseXML
 服務器的響應,表示爲XML。這個對象可以解析爲一個DOM對象
 
status
 服務器的HTTP狀態碼(200對應OK,404對應Not Found(未找到),等等)
 
statusText
 HTTP狀態碼的相應文本(OK或Not Found(未找到)等等)

 

 

 

下面是個交互實例

不同於標準Web客戶中所用的標準請求/響應方法,Ajax應用的做法稍有差別。

 

1. 一個客戶端事件觸發一個Ajax事件。從簡單的onchange事件到某個特定的用戶動作,很多這樣的事件都可以觸發Ajax事件。可以有如下的代碼:
<input type="text"d="email" name="email" οnblur="validateEmail()";>

 

2. 創建XMLHttpRequest對象的一個實例。使用open()方法建立調用,並設置URL以及所希望的HTTP方法(通常是GET或POST)。請求實際上通過一個send()方法調用觸發。可能的代碼如下所示:
var xmlHttp;

function validateEmail()

 {

   var email = document.getElementById("email");

   var url = "validate?email=" + escape(email.value);

   if (window.ActiveXObject)

{

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

   }

   else if (window.XMLHttpRequest)

{

     xmlHttp = new XMLHttpRequest();

  

}

xmlHttp.open("GET", url);

xmlHttp.onreadystatechange = callback;

xmlHttp.send(null);

}

3. 向服務器做出請求。可能調用servlet、CGI腳本,或者任何服務器端技術。
4. 服務器可以做你想做的事情,包括訪問數據庫,甚至訪問另一個系統。
5. 請求返回到瀏覽器。Content-Type設置爲text/xml——XMLHttpRequest對象只能處理text/html類型的結果。在另外一些更復雜示例中,響應可能涉及更廣,還包括JavaScript、DOM管理以及其他相關的技術。需要說明,你還需要設置另外一些首部,使瀏覽器不會在本地緩存結果。爲此可以使用下面的代碼:
response.setHeader("Cache-Control", "no-cache");

response.setHeader("Pragma", "no-cache");[1]

6. 在這個示例中,XMLHttpRequest對象配置爲處理返回時要調用callback()函數。這個函數會檢查XMLHttpRequest對象的readyState屬性,然後查看服務器返回的狀態碼。如果一切正常,callback()函數就會在客戶端上做些有意思的工作。以下就是一個典型的回調方法:
function callback()

{

   if (xmlHttp.readyState == 4)

 {

     if (xmlHttp.status == 200)

 {

          //do something interesting here

     }

   }

}

可以看到,這與正常的請求/響應模式有所不同,但對Web開發人員來說,並不是完全陌生的。顯然,在創建和建立XMLHttpRequest對象時還可以做些事情,另外當“回調”函數完成了狀態檢查之後也可以有所作爲。一般地,你會把這些標準調用包裝在一個庫中,以便在整個應用中使用,或者可以使用Web上提供的庫。這個領域還很新,但是在開源社區中已經如火如荼地展開了大量的工作。

 

 

 

使用XMLHttpRequest對象發送請求的基本步驟如下:

1. 爲得到XMLHttpRequest對象實例的一個引用,可以創建一個新的實例,也可以訪問包含有XMLHttpRequest實例的一個變量。


2. 告訴XMLHttpRequest對象,哪個函數會處理XMLHttpRequest對象狀態的改變,爲此要把對象的onreadystatechange屬性設置爲指向JavaScript函數的指針。


3. 指定請求的屬性。XMLHttpRequest對象的open()方法會指定將發出的請求。open()方法取3個參數:一個是指示所用方法(通常是GET或POST)的串;一個是表示目標資源URL的串;一個是Boolean值,指示請求是否是異步的。


4. 將請求發送給服務器。XMLHttpRequest對象的send()方法把請求發送到指定的目標資源。send()方法接受一個參數,通常是一個串或一個DOM對象。這個參數作爲請求體的一部分發送到目標URL。當向send()方法提供參數時,要確保open()中指定的方法是POST。如果沒有數據作爲請求體的一部分被髮送,則使用null。


這些步驟很直觀:你需要XMLHttpRequest對象的一個實例,要告訴它如果狀態有變化該怎麼做,還要告訴它向哪裏發送請求以及如何發送請求,最後還需要指導XMLHttpRequest發送請求。不過,除非你對C或C++很瞭解,否則可能不明白函數指針(function pointer)是什麼意思。

函數指針與任何其他變量類似,只不過它指向的不是像串、數字、甚至對象實例之類的數據,而是指向一個函數。在JavaScript中,所有函數在內存中都編有地址,可以使用函數名引用。這就提供了很大的靈活性,可以把函數指針作爲參數傳遞給其他函數,或者在一個對象的屬性中存儲函數指針。

對於XMLHttpRequest對象,onreadystatechange屬性存儲了回調函數的指針。當XMLHttpRequest對象的內部狀態發生變化時,就會調用這個回調函數。當進行了異步調用,請求就會發出,腳本立即繼續處理(在腳本繼續工作之前,不必等待請求結束)。一旦發出了請求,對象的readyState屬性會經過幾個變化。儘管針對任何狀態都可以做一些處理,不過你最感興趣的狀態可能是服務器響應結束時的狀態。通過設置回調函數,就可以有效地告訴XMLHttpRequest對象:“只要響應到來,就調用這個函數來處理響應。”

 

 簡單請求的示例

第一個示例很簡單。這是一個很小的HTML頁面,只有一個按鈕。點擊這個按鈕會初始化一個發至服務器的異步請求。服務器將發回一個簡單的靜態文本文件作爲響應。在處理這個響應時,會在一個警告窗口中顯示該靜態文本文件的內容。代碼清單2-4顯示了這個HTML頁面和相關的JavaScript。

代碼清單2-4 simpleRequest.html頁面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Simple XMLHttpRequest</title>

<script type="text/javascript">

var xmlHttp;

 

function createXMLHttpRequest()

{

    if (window.ActiveXObject)

{

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

    }

    else if (window.XMLHttpRequest)

{

        xmlHttp = new XMLHttpRequest();

    }

}

 

function startRequest()

{

    createXMLHttpRequest();

    xmlHttp.onreadystatechange = handleStateChange;

    xmlHttp.open("GET", "simpleResponse.xml", true);

    xmlHttp.send(null);

}

 

function handleStateChange() {

    if(xmlHttp.readyState == 4) {

        if(xmlHttp.status == 200) {

            alert("The server replied with: " + xmlHttp.responseText);

        }

    }

}

</script>

</head>

 

<body>

    <form action="#">

        <input type="button" value="Start Basic Asynchronous Request"

                οnclick="startRequest();"/>

    </form>

</body>

</html>

 

服務器的響應文件simpleResponse.xml只有一行文本。點擊HTML頁面上的按鈕會生成一個警告框,其中顯示simpleResponse.xml文件的內容。在圖2-4中可以看到分別在Internet Explorer和Firefox中顯示的包含服務器響應的相同警告框。

對服務器的請求是異步發送的,因此瀏覽器可以繼續響應用戶輸入,同時在後臺等待服務器的響應。如果選擇同步操作,而且倘若服務器的響應要花幾秒才能到達,瀏覽器就會表現得很遲鈍,在等待期間不能響應用戶的輸入。這樣一來,瀏覽器好像被凍住一樣,無法響應用戶輸入,而異步做法可以避免這種情況,從而讓最終用戶有更好的體驗。儘管這種改善很細微,但確實很有意義。這樣用戶就能繼續工作,而且服務器會在後臺處理先前的請求。

發佈了26 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章