Ajax工作原理和實現(xiàn)步驟

何為ajax?
Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML)
是一種創(chuàng)建網(wǎng)頁交互的技術(shù),其特點是可以在不刷新頁面的情況下與服務(wù)器交互 更新部分網(wǎng)頁內(nèi)容
ta的原理很簡單:

Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個中間層(AJAX引擎),使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請求都提交給服務(wù)器。像—些數(shù)據(jù)驗證和數(shù)據(jù)處理等都交給Ajax引擎自己來做,,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時再由Ajax引擎代為向服務(wù)器提交請求

Ajax編程步驟:
1、創(chuàng)建對象: var xhr = new XMLHttpRequest();
2、 準(zhǔn)備發(fā)送(建立連接):xhr.open('請求的方式','url', '默認異步:true');

get請求下參數(shù)加在url后,.ashx?methodName = GetAllComment&str1=str1&str2=str2
xhr.open("post", "/ashx/myzhuye/Detail.ashx?methodName=GetAllComment", true);

//post請求下需要配置請求頭信息
//xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

3、執(zhí)行發(fā)送(發(fā)送請求):xhr.send(null);

4、 定制回調(diào)函數(shù)(設(shè)置監(jiān)聽):xhr.onreadystatechange();
xhr.readystate是指:存有 XMLHttpRequest 的狀態(tài)。從 0 到 4 發(fā)生變化。
0: 請求未初始化
1: 服務(wù)器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應(yīng)已就緒

將ajax改為同步請求應(yīng)注意的問題:
1、界面會卡頓,卡頓的時間取決于網(wǎng)絡(luò)速度
2、xhr.onre 的回調(diào)將不會被執(zhí)行,將回調(diào)去除即可

封裝ajax:

function ajax(options, callback) {
    var default_p = {
        url: '',
        method: 'post',
        async: true,
        data: ''
    }
    
    var op = {};
    // 淺拷貝 
    for(var key in default_p) {
        op[key] = default_p[key];
    }
    for(var key in options) {
        // 查找op中的對象是否有options中的屬性,若有則傳入的覆蓋默認的
        if(op.hasOwnProperty(key)) {
            op[key] = options[key];
        }
    }
    var xhr = new XMLHttpRequest();
    xhr.open(op.method, op.url, op.async);
    op.method === 'post' && xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
    // 檢測是否是對象
    function testObj(obj) {
        if(obj instanceof Object) {
            for(var key in obj) {
                return true;
            }
            return false;
        }
        return false;
    };
    op.method === 'post' && testObj(op.data) ? xhr.send(JSON.stringify(op.data)) : xhr.send();
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4 && xhr.status === 200) {
            // 判斷是不是對象
            var reg = /^{.*}$/;
            // 如果后臺傳過來的是對象則反序列化
            if(reg.test(xhr.responseText)) {
               
                callback(JSON.parse(xhr.responseText));
            }
            else {
                callback(xhr.responseText);
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容