[ 造輪子 ] 手動封裝 AJAX (一) —— 基礎版

關於 AJAX 相信都用過,自己動手封裝的也肯定有不少,但應該都只是簡單的可以請求,不能設置同步異步以及返回的數據格式

  • 兼容低版本 IE5、IE6
  • 可以使用 get 和 post 請求數據
  • 可以設置請求頭 需要的思路以及語法都有了,需要小夥伴自己拓展哦
  • 可以設置返回數據格式,不設置爲默認
  • get 請求的數據拼接我沒寫,有需要的可以自己加
  • 之後會有 ES6 語法的封裝敬請期待
  • 注:代碼使用 ES5 語法,我寫的這個版本的傳參只能按照順序來

直接上代碼

//1.用 ES5 寫 ajax
var ajax = function (url,method,data,async,success,error,resType) {
    
    //設置變量默認值
    method = method || "GET";
    async = async || true;
    data = data || "";
    resType = resType || "";
    //數據校驗
    if(!url || url === ''){
        throw new Error('url不能爲空');//throw 用來拋出異常 
    }
    if(method==="GET" && data != ""){
        throw new Error('請將get請求參數寫在url裏');//由於時間不太夠不再寫參數拼接,有興趣的小夥伴可以自己加參數拼接功能
    }
    //將小寫全部轉換爲大寫
    method = method.toUpperCase();
    //判斷是否是低版本 IE
    if (window.XMLHttpRequest) { //是否支持XMLHttpRequsest
        var xhr = new XMLHttpRequest();
    } else { //低版本 IE 
        var xhr = new ActiveXObject("Microsft.XMLHTTP");
    }
    //xmlhttp.open(method,url,async) 請求類型 請求地址 是否異步
    xhr.open(method, url, async);
    //設置請求頭
    //判斷是否設置
    //循環 headers 設置請求頭
    // xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    //設置返回數據格式
    if(async){//如果設置了同步就不能設置返回數據格式
        xhr.responseType = resType; // 在不設置responseType的時候默認爲 text
    }
    //send(data) 將請求發送到服務器。 data僅用於post
    xhr.send(data);

    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {

            var res = xhr.response;
            if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
                success && success(res);
            } else {
                error && error(res);
            }
        }
    }
}
//url,method,data,async,success,error,resType
ajax("1.json","GET","",true,function(res){console.log(res);},function(error){console.log(error);},'json');

請求的 json 文件內容

{
    "name": "yhtx1997",
    "text": "恭喜你測試成功!!!"
}

調用效果圖

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