原生ajax+封裝ajax+使用方法

剛開始接觸ajax覺得很深奧,看了教學視頻也一蒙一蒙的,後來自己親身使用了下終於有所開竅,下面來說說我的思路

ajax分爲get、post兩種方式,只要記住運行的五個步驟就行了

1、創建XMLHttpRequest對象;

2、使用對象open方法,放置—請求方式:get/post,api,async;

3、使用對象send方法,放置—所要發送的數據;

4、執行onreadystatechange回調函數,函數內判斷對象readyState和status的狀態;

     readyState(狀態值):ajax的運行步驟,無論訪問是否成功都會響應的步驟,五個值(0-4);

                                 取值:0、請求未初始化(沒有執行open()方法和send()方法);

                                            1、服務器已連接,正在發送請求;

                                            2、請求接收;

                                            3、請求處理,解析響應內容;

                                            4、請求完成,解析完成,數據可以調用;

    status(狀態碼):無論請求是否成功,http協議返回的信息,來判斷服務器狀態;

                        取值:1XX、信息響應(服務器接收到請求並且處理);

                                   2XX、處理成功響應的信息;

                                   3XX、重定向響應(需要對信息進行進一步處理);

                                   4XX、客戶端錯誤(請求語法錯誤不能被執行);

                                   5XX、服務器錯誤(執行請求失敗);

貼上四個步驟的代碼:

// 第一步:創建對象
var xhr = null;
// 根據瀏覽器創建兼容的XMLHttpRequest對象
if(window.XMLHttpRequest) {
    // 兼容火狐、谷歌
    xhr = new XMLHttpRequest();
} else {
    // 兼容ie
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
}

// 第二步:執行open函數
xhr.open('get/post', url, async); // async取值true(同步)/false(異步)

// 第三步:執行send函數
xhr.send(null); // 需要發送的數據

// 第四步:執行回調函數
xhr.onreadystatechange = function() {
    // 同時滿足狀態值和狀態碼請求訪問成功
    if(xhr.readyState == 4 && xhr.status == 200) {
        // 打印返回數據
        console.log(xhr.responseText);
    }
}

上面是最基本的代碼,下面來封裝一下,技術不佳,潦草能用,尚待完善

function ajax(option) {
    // 實例化對象
    option = option || {};
    // 默認type爲GET
    option.type = option.type.toUpperCase() || 'GET';
    // 接口
    option.url = option.url || '';
    // 默認異步
    option.async = option.async || true;
    // 發送數據
    option.data = option.data || {};
    // success
    option.success = option.success || function() {};

    // 創建xhr對象
    var xhr = null;
    if(window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    // 處理需要發送的參數
    var params = [];
    for (var key in option.data) {
        params.push(key + '=' + option.data[key] + '&');
    }

    // 判斷type
    if (option.type.toUpperCase() === 'GET') {
        xhr.open(option.type, option.url, option.async);
        xhr.send(null);
    } else if (option.type.toUpperCase() === 'POST') {
        xhr.open(option.type, option.url, option.async);
        // 設置響應頭
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
        xhr.send(params);
    }

    // 執行回調
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status == 200) {
                option.success(xhr.responseText);
            }
        }
    }
}

使用方法:

var data = {
            type: 'get',
            url: './api.php',
            success: function(data) {
                console.log(data);
            }
        };
ajax(data);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章