ajax實踐

1, ajax 是什么?有什么作用?

ajax(Asynchronous JavaScript and XML)以異步的方式從服務器獲取數據,不必刷新頁面也能獲取新數據。ajax的核心對象就是XMLhttpRequest,通過JavaScript DOM將ajax獲得的數據顯示在頁面上。

作用是帶來更好的用戶體驗。

2, 前后端開發聯調需要注意哪些事情?后端接口完成前如何 mock 數據?

前后端開發時需要注意:

  1. 約定接口類型(GET還是POST)、接口(傳遞到那個路由)
  2. 前端傳遞給后端的參數(參數的類型、格式)
  3. 后端返回數據的格式(是數組還是字符串還是JSON格式)

后端接口完成前可以使用server-mock搭建模擬服務器

3,點擊按鈕,使用 ajax 獲取數據,如何在數據到來之前防止重復點擊?

設置判斷變量,數據沒拿到時設置為false,拿到數據才設置為true,為false時忽略后面的點擊事件

本例中的isDataArrive即為判斷數據是否拿到的變量

<script>
    //整體思路就是給按鈕添加點擊事件,寫ajax得到數據,然后通過渲染添加到html上就可以了
    var btn = document.querySelector('#load-more');
    var ct = document.querySelector('#ct');
    var tempIndex = 3;//記錄每次的變量

//    針對網速較慢并且重復點擊的情況做得優化:第一種思路,如果一點時間內請求沒到,忽略用戶后面點擊的。第二種思路,用戶點擊了多次,每次的輸出內容都要顯示
    var isDataArrive = true; // 設置判斷變量,數據沒拿到時設置為false


    btn.addEventListener('click',function () {

        if (!isDataArrive) {
            return; //如果數據沒拿到,直接return掉,后面的點擊就被忽略掉
        }

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && (xhr.status == 200 || xhr.status == 304)) {
                var content = JSON.parse(xhr.responseText);
//                console.log(content); //寫到這先測試一下給的數據對不對
//                開始拼裝html
//                var html = '';
//                for (var i = 0; i < content.length; i ++) {
//                    html += '<li>' + content[i] + '</li>';
//                }
//               拼裝好html,應該是appendChild到ct后面,但是每次appendChild回影響性能,可以使用Fragment,所以可以改寫為:
                var fragment = document.createDocumentFragment();
                for (var i = 0; i < content.length; i ++) {
                    var node = document.createElement('li');
                    node.innerText = content[i]; // 使用innerText不用innerHTML還有個好處是可以防止xss注入
                    fragment.appendChild(node);
                }
                ct.appendChild(fragment);
                tempIndex += 5;

                isDataArrive = true;//readyState === 4 表示數據已經拿到了
            }
        };
        xhr.open('get','/loadMore?index='+ tempIndex +'&length=5',true);
//       前端需要得到一個數組 ['content1','content2',...,'content5']
//       前端需要向后端發送的  /loadMore?index=3&length=5                  /loadMore為接口,后端對loadMore進行處理
//        {
//            index: 3,
//            length: 5,
//         }
/*          一般在請求數據之前都要想清楚前端需要得到什么數據,需要向后端發送的是什么接口,參數是怎么樣的。
            1.GET
            2./loadMore
            3. {
                index: 3,
                length: 5,
            }
            4. ['content1','content2',...,'content5']
 */
        xhr.send();
        isDataArrive = false; // 沒拿到數據設置為false
    })
</script>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ajax 是什么?有什么作用? AJAX的全稱是Asynchronous JavaScript and XML(異...
    cross_王閱讀 340評論 0 0
  • 1.ajax 是什么?有什么作用? Asynchronous JavaScript and XML(異步的 Jav...
    clark124閱讀 249評論 0 0
  • 題目1: ajax 是什么?有什么作用? ajax全稱Asynchronous Javascript And XM...
    漂于行閱讀 393評論 0 1
  • ajax 是什么?有什么作用? AJAX = 異步 JavaScript 和 XML。AJAX 是一種用于創建快速...
    Vincent_永閱讀 168評論 0 0
  • 有人說,我寫短文比長文好一點。嗯,我思考過這個問題。 腦子里的想法、創意滿天飛,但具體表達和執行的時候,困難重重。...
    莫玄斐隱閱讀 375評論 0 1