Ajax

一、Ajax 是什么?有什么作用?

1.Ajax是Asynchronous JavaScript And XML的縮寫,這一技術(shù)能夠從服務(wù)器獲取額外的數(shù)據(jù)而無需刷新整個頁面,會帶來良好的用戶體驗(yàn);
2.Ajax在瀏覽器和Web服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP請求)從服務(wù)器獲取數(shù)據(jù);
3.Ajax本質(zhì)就是用JS創(chuàng)造了一個XMLHttpRequest對象,這個對象可以操作瀏覽器的接口,不通過頁面刷新,而是直接向后臺發(fā)送請求獲取數(shù)據(jù),然后瀏覽器進(jìn)行展示改變網(wǎng)頁;
4.使用Ajax最直觀的感受就是向服務(wù)器獲取數(shù)據(jù)不需要刷新頁面等待了。
Ajax使用的四大步驟

二、前后端開發(fā)聯(lián)調(diào)需要注意哪些事情?后端接口完成前如何 mock 數(shù)據(jù)?(npm install -g server-mock)

1.需要注意的事情:

  • 約定前后端聯(lián)調(diào)的時間。
  • 約定雙方需要傳輸?shù)臄?shù)據(jù)和接口,在接口文檔中確定好參數(shù)的名稱、格式等。
  • 約定請求和響應(yīng)的格式和內(nèi)容。

2.mock數(shù)據(jù)的方法有:

  • 使用server-mock或mock.js搭建模擬服務(wù)器,進(jìn)行模擬測試;
  • 使用XAMPP等工具,編寫PHP文件來進(jìn)行測試。

三、點(diǎn)擊按鈕,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?

var isLocked = false;//利用布爾值作為狀態(tài)鎖
btn.addEventListener('click',function(){
   if(isLocked == true){
      return;
   }
   isLocked = true;//先上鎖
   ajax({
 ...
 });
});
function success(){
 ...
 isLocked = false;//解鎖
}
function erreo(){
 ...
 isLocked = false;//解鎖
}

代碼練習(xí)

四、封裝一個 ajax 函數(shù),能通過如下方式調(diào)用

        function ajax(opts){
            // todo ...
        }
        document.querySelector('#btn').addEventListener('click', function(){
            ajax({
                url: 'getData.php',   //接口地址
                type: 'get',               // 類型, post 或者 get,
                data: {
                    username: 'xiaoming',
                    password: 'abcd1234'
                },
                success: function(ret){
                    console.log(ret);       // {status: 0}
                },
                error: function(){
                   console.log('出錯了')
                }
            })
        });

代碼:

function ajax(opts){
    //創(chuàng)建ajax對象
    var xmlhttp=new XMLHttpRequest();
    //對ajax進(jìn)行事件監(jiān)聽
    xmlhttp.onreadystatechange=function(){
        if(xmlhttp.readyState===4&&xmlhttp.status===200){
            //將服務(wù)器返回的文本內(nèi)容轉(zhuǎn)換為JSON格式
            var json=JSON.parse(xmlhttp.responseText);
            opts.success(json);
        }
        if(xmlhttp.status===404){
            opts.error();
        }
    }

    //創(chuàng)建發(fā)送到服務(wù)器的數(shù)據(jù),為了讓數(shù)據(jù)附加到url上,必須為key/value格式
    var dataStr="";
    for(var key in opts.data){
        dataStr+=key+"="+opts.data[key]+"&";
    }
    dataStr=dataStr.substr(0,dataStr.length-1);

    //判斷請求的方式為GET
    if(opts.type.toLowerCase()==="GET"){
        //連接服務(wù)器
        xmlhttp.open("GET",opts.url+"?"+dataStr,true);
        //發(fā)送請求
        xmlhttp.send();
    }

    //判斷請求方式為post
    if(opts.type.toLowerCase()==="post"){
        xmlhttp.open("POST",opts.url,true);
        //為了使post請求與提交web表單相同,
        //將Content-Type頭部信息設(shè)置為application/x-www-form-urlencoded來模仿表單提交功能
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlhttp.send(dataStr);
    }
}

五、實(shí)現(xiàn)如下加載更多的功能。

代碼地址

六、實(shí)現(xiàn)注冊表單驗(yàn)證功能。

代碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,556評論 25 708
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,288評論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 6月2日讀書筆記 讀書內(nèi)容:《謝謝你離開我》(張小嫻著) “男人可以為一個女人舍棄無謂的應(yīng)酬、舍棄一些自由、舍棄一...
    考拉淺淺笑閱讀 502評論 1 3
  • 繞過小屋,河邊牙上有一株毛桃樹,每年三月,花開之際,總是要艷麗到我們的眼睛,當(dāng)然還有我們的期盼。挨過紛飛的四月,曖...
    素手描紅閱讀 375評論 1 2