1. 程式人生 > >C語言構建WEB管理系統(六):使用XMLHttpRequest物件和服務端交換資料

C語言構建WEB管理系統(六):使用XMLHttpRequest物件和服務端交換資料

      

以登入頁面為例,當我們提交登入頁面表單時,將登入使用者名稱和登入密碼傳送到伺服器,這個時候我們肯定希望伺服器可以返回提交的使用者名稱和密碼是否正確的資訊。如果錯誤給出提示資訊以便重新輸入,正確則頁面給出提示或跳轉到指定頁面。這是就需要前端和伺服器端可以同步或非同步進行通訊。


1. 建立XMLHttpRequest 物件         通過建立XMLHttpRequest 物件可以實現頁面前端和伺服器交換資料, 並且在已載入頁面情況下向伺服器請求和接受資料。使用如下方法建立XMLHttpRequest:
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} 
為了處理所有現代的瀏覽器,包括 IE5 和 IE6,請檢查瀏覽器是否 支援 XMLHttpRequest 物件。如果支援,則建立一個 XMLHttpRequest 物件,如果不支援,則建立一個 ActiveX 物件。

2. 傳送請求道伺服器

        為了傳送一個請求到伺服器,我們使用 XMLHttpRequest 物件的 open() 和 send() 方法:

xmlhttp.open("GET","xxx.txt",true);
xmlhttp.send();
open方法原型為:
open(method,url,async);<span style="font-family:'Open Sans', 'Helvetica Neue', Helvetica, Arial, STHeiti, 'Microsoft Yahei', sans-serif;color:#333333;background-color:#FFFFFF;font-style:normal;text-align:start;"></span>
該方法規定請求型別,URL,請求是或否非同步處理。 method:請求的型別:GET 或 POST
url:檔案在伺服器上的位置
async:true(非同步)或 false(同步)。
send方法原型為:
send(string);
該方法傳送請求道伺服器,引數string僅用於 POST 請求。 3. 為響應伺服器準備執行函式         當請求傳送到伺服器後,我們需要根據伺服器響應執行某些動作。這時可以使用async=true,此時需要給onreadystatechange事件規定一個執行函式。  當使用 async=true 時,需要給xmlHttp成員onreadystatechange事件賦予執行動作,onreadystatechange 事件在每次 readyState 變化時被觸發,在每次 readyState 屬性變化時被自動呼叫。在 onreadystatechange 事件中,我們規定當伺服器的響應準備處理時會發生什麼。
xmlHttp中readyState存放了 XMLHttpRequest 的狀態。從 0 到 4 變化:0:請求未初始化
1:伺服器建立連線
2:收到的請求
3:處理請求
4:請求完成和響應準備就緒
xmlHttp還有一個重要的屬性是status,200為"OK" 404為找不到頁面。
所以,onreadystatechange 事件在每次 readyState 發生變化時被觸發,總共觸發了四次。
一般我們在當 readyState 是 4 或狀態是 status是200 時,執行響應動作。如下:
function xxx_ready {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        //do somthing;
    }
}
從伺服器獲取響應資料,需要使用 XMLHttpRequest 物件的 responseText 或 responseXML 屬性,如:
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;