2020-07-01

ajax封裝

function ajax(options) {
            // 存儲(chǔ)的是默認(rèn)值
            var defaults = {
                type: 'get',
                url: '',
                data: {},
                header: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                success: function () { },
                error: function () { }
            };
            // 使用options對(duì)象中的屬性覆蓋defaults對(duì)象中的屬性
            Object.assign(defaults, options);

            // 創(chuàng)建ajax對(duì)象
            var xhr = new XMLHttpRequest();

            // 拼接請(qǐng)求參數(shù)的變量
            var params = '';
            // 循環(huán)用戶傳遞進(jìn)來(lái)的對(duì)象格式參數(shù)
            for (var attr in defaults.data) {
                // 將參數(shù)轉(zhuǎn)換為字符串格式
                params += attr + '=' + defaults.data[attr] + '&';
            }
            // 將參數(shù)最后面的&截取掉 
            // 將截取的結(jié)果重新賦值給params變量
            params = params.substr(0, params.length - 1);
            // 判斷請(qǐng)求方式
            if (defaults.type == 'get') {
                defaults.url = defaults.url + '?' + params;
            }


            // 配置ajax對(duì)象
            xhr.open(defaults.type, defaults.url);

            // 如果請(qǐng)求方式為post
            if (defaults.type == 'post') {
                // 用戶希望的向服務(wù)器端傳遞的請(qǐng)求參數(shù)的類型
                var contentType = defaults.header['Content-Type']
                // 設(shè)置請(qǐng)求參數(shù)格式的類型
                xhr.setRequestHeader('Content-Type', contentType);
                // 判斷用戶希望的請(qǐng)求參數(shù)格式的類型
                // 如果類型為json
                if (contentType == 'application/json') {
                    // 向服務(wù)器端傳遞json數(shù)據(jù)格式的參數(shù)
                    xhr.send(JSON.stringify(defaults.data))
                } else {
                    // 向服務(wù)器端傳遞普通類型的請(qǐng)求參數(shù)
                    xhr.send(params);
                }
            } else {
                // 發(fā)送請(qǐng)求
                xhr.send();
            }
            // 監(jiān)聽(tīng)xhr對(duì)象下面的onload事件
            // 當(dāng)xhr對(duì)象接收完響應(yīng)數(shù)據(jù)后觸發(fā)
            xhr.onload = function () {
                // xhr.getResponseHeader()
                // 獲取響應(yīng)頭中的數(shù)據(jù)
                var contentType = xhr.getResponseHeader('Content-Type');
                // 服務(wù)器端返回的數(shù)據(jù)
                var responseText = xhr.responseText;

                // 如果響應(yīng)類型中包含applicaition/json
                if (contentType.includes('application/json')) {
                    // 將json字符串轉(zhuǎn)換為json對(duì)象
                    responseText = JSON.parse(responseText)
                }

                // 當(dāng)http狀態(tài)碼等于200的時(shí)候
                if (xhr.status == 200) {
                    // 請(qǐng)求成功 調(diào)用處理成功情況的函數(shù)
                    defaults.success(responseText, xhr);
                } else {
                    // 請(qǐng)求失敗 調(diào)用處理失敗情況的函數(shù)
                    defaults.error(responseText, xhr);
                }
            }
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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