ajax實踐

ajax 是什么?有什么作用?

  • AJAX = 異步 JavaScript 和 XML。
    AJAX 是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。
    通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進行更新。
  • 優(yōu)點
    更新數(shù)據(jù)而不需要刷新頁面: 它能在不刷新整個頁面的前提下與服務(wù)器通信維護數(shù)據(jù),由于ajax是按照需求請求數(shù)據(jù),避免發(fā)送那些沒有改變的數(shù)據(jù)。
    異步通信: 它與服務(wù)器使用異步的方式通信,不會打斷用戶的操作(卡死頁面)。
    前后端負載平衡: 可以將后端服務(wù)器的一些工作轉(zhuǎn)移給客戶端,利用客戶端限制的能力來處理,減輕了服務(wù)器的負擔。
    數(shù)據(jù)與呈現(xiàn)分離: 利于分工,降低前后耦合。
  • 缺點
    瀏覽器歷史記錄的遺失: 在使用AJAX對頁面進行改變后,由于并沒有刷新頁面,沒有改變頁面的訪問歷史,當用戶想要回到上一個狀態(tài)時,無法使用瀏覽器提供的后退。
    AJAX的安全問題: AJAX的出現(xiàn)就像建立起了一直通服務(wù)器的另一條通道,容易遭受到一些攻擊。

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

  • 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情:
    約定數(shù)據(jù): 后端數(shù)據(jù)寫好,放在模板里,前端可以寫頁面,互不影響
    約定接口: 請求和響應(yīng)的格式;接口名稱,請求參數(shù),響應(yīng)

  • 后端接口完成前如何mock數(shù)據(jù)
    mock數(shù)據(jù)指的是在后端開發(fā)沒有完成時,前端可以通過mock方法搭建本地服務(wù)器,模擬后臺數(shù)據(jù)來實現(xiàn)數(shù)據(jù)交互的效果。
    可安裝xampp在本地搭建(php等)服務(wù)器,也可以安裝server-mock,這樣不需要特地去寫一個后臺的處理頁面文件來訪問數(shù)據(jù)。

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

設(shè)置一個狀態(tài)鎖,在觸發(fā)ajax前是鎖定的,之后若重復(fù)點擊都不會觸發(fā)ajax,直到代碼執(zhí)行完在接觸鎖定.

  var isloading = false;  // 設(shè)置狀態(tài)鎖,用于是否在加載數(shù)據(jù)
  btn.addEventListener('click', function(e) {
        e.preventDefault();     //  防止點擊 a 鏈接頁面跳到頂部
  }
       if(isLoading) {
          return;                 //  //如果正在請求數(shù)據(jù),那這次點擊什么都不做
  }

  ajax('/loadMore', {
  idx: curIndex,
  len: len
  }, function(data){
        appendData(data)
        isLoading = false   //數(shù)據(jù)到來之后 解鎖
        curIndex = curIndex + len  //修改序號,下次要數(shù)據(jù)就從新序號開始要
        console.log(curIndex)
})
  isLoading = true   //發(fā)請求之前做個標記加鎖

})

實現(xiàn)加載更多的功能,后端在本地使用server-mock來模擬數(shù)據(jù)

function ajax(opts) {
  var type = opts.type || 'get';
  type = type.toLowerCase() || 'get';
  var url = opts.url || '';
  var  date = opts.date || null;
  var success = opts.success || function(){};
  var error = opts.success || function(){};
  var xhr = window.XMLHttpRequest? new XMLHttpRequest():new     
    
  ActiveXObject('microsoft.XMLHTTP');
  var dateArry = [];
  for(var key in date){
    dateArry.push(key + '=' +date[key]);
  }
  var dateStr = dateArry.join('&');
  if(type === 'get'){
  xhr.open(type,url+'?'+dateStr,true);
  xhr.send();
  }else{
      xhr.open(type,url,true)
      xhr.setRequestHeader('Content-Type', 'application/x-www-form-      誠
      urlencoded;charset=utf-8');
      xhr.send(dateStr)
  }

xhr.onreadystatechange = function(){
if(xhr.readyState === 4  && xhr.status === 200){
    success(xhr.responseText)
}else{
    error();
  }
 }
}

document.querySelector('#btn').addEventListener('click', function(){
ajax({
    url: '/login',   //接口地址
    type: 'get',               // 類型, post 或者 get,
    data: {
        username: 'xiaoming',
        password: 'abcd1234'
    },
     success: function(ret){
        console.log(ret);       // {status: 0}
    },
    error: function(){
       console.log('出錯了')
    }
  })
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ajax 是什么?有什么作用? AJAX的全稱是Asynchronous JavaScript and XML(異...
    cross_王閱讀 381評論 0 0
  • 1- 關(guān)于 ajax 及其作用 Ajax是Asynchronous JavaScript and XML的縮寫。...
    osborne閱讀 580評論 0 0
  • 1.ajax 是什么?有什么作用? Asynchronous JavaScript and XML(異步的 Jav...
    clark124閱讀 290評論 0 0
  • 題目1: ajax 是什么?有什么作用? 含義:腳本發(fā)起HTTP通信 作用:傳輸數(shù)據(jù)到服務(wù)器,監(jiān)聽狀態(tài)碼實現(xiàn)服務(wù)器...
    從前慢pearl閱讀 193評論 0 0
  • 一場游戲 迎來了人生過往 七堇年,陪著歲月飄香 是你那雙深邃的眼眸 把長夜的寂寥 點亮 還得讓平凡的故事 重演 演...
    江城妖怪閱讀 430評論 0 0

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