Ajax編程技術

Ajax:Asynchronous Javascript and XML, 異步的Javascript和XML技術。是指一種創建交互式網頁應用的網頁開發技術。它不是一種單一的技術,而是有機地利用一系列的相關技術的組合,即:Javascript + XMLHttpRequest + CSS + 服務器端 的集合。

Ajax的優點:

1.Ajax在本質上是一個瀏覽器端的技術
2.Ajax技術之主要目的在於局部交換客戶端及服務器間之數據
3.這個技術的主角XMLHttpRequest的最主要特點,在於能夠不用重新載入整個版面來更新資料,也就是所謂的Refreshwithout Reload(輕刷新)
4.與服務器之間的溝通,完全是透過Javascript來實行
5.使用XMLHttpRequest本身傳送的數據量很小,所以反應會更快,也就讓網絡程式更像一個桌面應用程序
6.AJAX就是運用Javascript在後臺悄悄幫你去跟服務器要資料,最後再由Javascript或DOM來幫你呈現結果,因爲所有動作都是由Javascript代勞,所以省去了網頁重載的麻煩,   使用者也感受不到等待的痛苦


異步請求基本步驟:使用XMLHttpRequest對象

按照下面模式,可以同步地XMLHttpRequest對象:

1.創建對象;-new (叫助手過來)
2.創建請求;-open (告訴他要去做的事情)
3.發送請求;-send (去吧)

具體代碼(獲得服務器時間)

<script type="text/javascript">
        window.onload = function () {
            document.getElementById("btnGetTime").onclick = function () {
                //向服務器請求 時間
                //1.創建異步對象(小瀏覽器)
                var xhr = new XMLHttpRequest();
                //2.設置參數
                xhr.open("get", "GetTime.ashx?name=jameszou", true);
                //3.讓get請求不從瀏覽器獲取緩存數據
                xhr.setRequestHeader("If-Modified-Since","0");
                //3.設置回調函數
                xhr.onreadystatechange = function () {
                    //3.1當完全接收完響應報文後 並且 響應狀態碼爲200的時候
                    if (xhr.readyState == 4 && xhr.status == 200)
                    {
                        //3.2獲取相應報文體內容
                        var res = xhr.responseText;
                        alert(res);
                    }
                };
                //4.發送異步請求
                xhr.send(null);
            };

            document.getElementById("btnPostTime").onclick = function () {
                //向服務器請求 時間
                //1.創建異步對象(小瀏覽器)
                var xhr = new XMLHttpRequest();
                //2.設置參數
                xhr.open("post", "GetTime.ashx", true);
                //3.設置 請求 報文體 的 編碼格式(設置爲 表單默認編碼格式)
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                //4.設置回調函數
                xhr.onreadystatechange = function () {
                    //3.1當完全接收完響應報文後 並且 響應狀態碼爲200的時候
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        //3.2獲取相應報文體內容
                        var res = xhr.responseText;
                        alert(res);
                    }
                };
                //5.發送異步請求"name=jameszou"
                //5.1格式:直接拼接字符串 key=value&key1=value2
                xhr.send("name=jameszou&age=29");
            };
        };
    </script>
<body>
    <input type="button" id="btnGetTime" value="get獲取服務器時間" />
    <input type="button" id="btnPostTime" value="post獲取服務器時間" />
</body>
一般處理程序GetTime.ashx代碼:
 public class GetTime : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //接收瀏覽器 ajax 方式發送來的 get 參數
            string strName = context.Request.Params["name"];
            //休息
            System.Threading.Thread.Sleep(1000);
            //輸出響應報文
            context.Response.Write(DateTime.Now.ToString() + ",name=" + strName);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }


下面是一個jsHelper類,條用Ajax方法
var jsHelper = {
    /*1.0 瀏覽器兼容的方式創建異步對象*/
    makeXHR: function () {
        //聲明異步對象變量
        var xmlHttp = false;
        //聲明 擴展 名
        var xmlHttpObj = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "MSXML.XMLHttp"];
        //判斷瀏覽器是否支持 XMLHttpRequest,如果支持,則是新式瀏覽器,可以直接創建
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
        //否則,只能循環 遍歷 老式瀏覽器 異步對象名,一一嘗試創建,直到創建成功爲止
        else if (window.ActiveXObject) {
            for (i = 0; i < xmlHttpObj.length; i++) {
                xmlHttp = new ActiveXObject(xmlHttpObj[i]);
                if (xmlHttp) {
                    break;
                }
            }
        }
        //判斷 異步對象 是否創建 成功,如果 成功,則返回異步對象,否則返回false
        return xmlHttp ? xmlHttp : false;
    },
    /*2.0 發送Ajax請求*/
    doAjax: function (method, url, data, isAyn, callback,errCallback) {
        method = method.toLowerCase();
        //2.1創建異步對象
        var xhr = this.makeXHR();
        //2.2設置請求參數(如果是get,則帶url參數,如果不是,則不帶)
        xhr.open(method, url + (method == "get" ? "?" + data : ""), isAyn);
        //2.3根據請求謂詞(get/post),添加不同的請求頭
        if (method == "get") {
            xhr.setRequestHeader("If-Modified-Since", 0);
        } else {
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        }
        //2.4設置回調函數
        xhr.onreadystatechange = function () {
            //如果接受完畢 服務器發回的 響應報文
            if (xhr.readyState == 4) {
                //判斷狀態碼是否正常
                if (xhr.status == 200) {
                    //正常,則調用回調函數
                    callback(xhr);//當 異步對象調用 回調函數時,爲回調函數 傳入 xhr 對象
                }
                //如果不正常,則嘗試調用 異常回調函數
                else {
                    //如果 異常回調函數 存在,則調用,並傳入 狀態碼
                    if (errCallback) {
                        errCallback(xhr.status);
                    }
                    //否則,直接提示 錯誤~!
                    else {
                        alert("錯誤啦~~狀態碼:" + xhr.status);
                    }
                }
            }
        };
        //2.5發送(如果是post,則傳參數,否則不傳)
        xhr.send(method != "get" ? data : null);
    },
    /*3.0 直接發送Post請求*/
    doPost: function (url, data, isAyn, callback, errCallback) {
        this.doAjax("post", url, data, isAyn, callback);
    },
    /*4.0 直接發送Get請求*/
    doGet: function (url, data, isAyn, callback, errCallback) {
        this.doAjax("get", url, data, isAyn, callback);
    }
};




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