AJAX

AJAX是微軟發(fā)明
用js發(fā)一個請求啊
ajax是不刷新頁面請求的唯一方法

get在req.query里面
post在req.body里面

瀏覽器發(fā)出請求:
1.地址欄輸入網(wǎng)址url
2.link css
3.img src = xxx
4.script = xxx
5.form表單也可以發(fā)請求(當(dāng)用戶點(diǎn)擊提交時)

面試
onreadystatuchange
statu === 4 才是完成
readystatu

題目1: ajax 是什么?有什么作用?
AJAX = 異步 JavaScript 和 XML。描述了一種將新的現(xiàn)有技術(shù)一起使用的“新”方法拖叙, 包括: HTML或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 最重要的是 XMLHttpRequest 對象到推。
通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換词裤,AJAX 可以使網(wǎng)頁實(shí)現(xiàn)異步更新寨昙。這意味著可以在不重新加載整個網(wǎng)頁的情況下僻肖,對網(wǎng)頁的某部分進(jìn)行更新。

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

  • 約定數(shù)據(jù):需要傳輸?shù)臄?shù)據(jù)以及數(shù)據(jù)類型;
  • 約定接口:接口名稱肤粱,請求和響應(yīng)的格式弹囚,請求的參數(shù)名稱,響應(yīng)的數(shù)據(jù)格式狼犯;
  • 根據(jù)這些約定整理成接口文檔余寥。

后端接口完成前如何 mock 數(shù)據(jù):

  • 可以根據(jù)接口文檔,使用假數(shù)據(jù)來驗(yàn)證我們制作的頁面響應(yīng)和接口是否正常悯森。
  • 可以搭建php本地服務(wù)器用宋舷,php寫腳本提供臨時數(shù)據(jù);
  • 也可使用Mock.js瓢姻,它能攔截ajax請求并根據(jù)請求中的內(nèi)容來隨機(jī)生成符合你要求的假數(shù)據(jù)祝蝠,模擬后端環(huán)境讓你完成對頁面和接口的測試。

題目3:點(diǎn)擊按鈕幻碱,使用 ajax 獲取數(shù)據(jù)绎狭,如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
添加一個狀態(tài)鎖,在觸發(fā)ajax前先上鎖褥傍,之后用戶再怎么點(diǎn)擊都不會觸發(fā)ajax儡嘶,直到ajax代碼執(zhí)行完才會觸發(fā)。

var btn = document.querySelector('.btn');
var lock = false; 

btn.addEventListener('click',function(e){
    e.preventDefault();

    if(lock){
        return;
    }else{
        lock = true;
        ajax({
            ...
            },
            success: function(){
                ...
                lock = false;
            },

            error: function(){
                ...
                lock = false;
            }
        });  
    }
})

題目4:封裝一個 ajax 函數(shù)恍风,能通過如下方式調(diào)用蹦狂。后端在本地使用server-mock來 mock 數(shù)據(jù)

function ajax(opts){
  var xhr = new XMLHttpRequest()
  xhr.onreadystatechange = function(){
      if(xhr.readyState === 4){
          if(xhr.status === 200 || xhr.status === 304){
              var results = JSON.parse(xhr.responseText)
              opts.success('results')
          }else{
              opts.error()
          }
      }
  }
  var query = '?'
  for (key in opts.data){
      query += key + '=' + opts.data[key] + '&'
  }
  query = query.substr(0, query.length-1)
  xhr.open(opts.type, opts.url+query, true)
  xhr.send()
}
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('出錯了')
        }
    })
});

題目5:實(shí)現(xiàn)加載更多的功能朋贬,效果范例149凯楔,后端在本地使用server-mock來模擬數(shù)據(jù)

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    ul,li{
        margin: 0;
        padding: 0; 
    }

    #ct li{
        list-style: none;
        border: 1px solid #ccc;
        padding: 10px;
        margin-top: 10px;
        cursor: pointer;
    }

    #load-more{
        display: block;
        margin: 10px auto;
    }

    .btn{
        display: inline-block;
        text-decoration: none;
        color: #E27272;
        border: 1px solid #E27272;
        border-radius: 3px;
        text-align: center;
        height: 40px;
        width: 80px;
        line-height: 40px;
    }

    .hover{
        background: green;
        color: #fff;
    }
  </style>
</head>
<body>
  <ul id='ct'>
    <li>內(nèi)容1</li>
    <li>內(nèi)容2</li>
  </ul>
  <a href="#" class='btn' id='load-more'>加載更多</a>
  <script>
    var ct = document.querySelector('#ct');
var loadMoreBtn = document.querySelector('#load-more');

ct.addEventListener('mouseover',function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    e.target.classList.add('hover');
  }
});

ct.addEventListener('mouseout',function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    e.target.classList.remove('hover');
  }
});

var lock = false;
var count = 3;

loadMoreBtn.addEventListener('click',function(e){
  e.preventDefault();
  
  if(lock){
    return;
  }else{
    lock = true;
    
    ajax({
      url: 'loading...',
      type: 'get',
      data: {
        start: count,
        length: 6
      },
      success: function(json){
        if(json.status === 1){
          append(json.data);
          count += 6;
        }else{
          console.log('失敗');
        }
        lock = false;
      },

      error: function(){
        alert('出現(xiàn)錯誤');
        lock = false;
      }

    });  
  }
  
  
});

function append(arr){
  for(var i=0; i<arr.length; i++){
    var li = document.createElement('li');
    li.innerHTML = '內(nèi)容'+arr[i];
    ct.appendChild(li);
  }
}


function ajax(opts){
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(){
      if(xhr.readyState === 4){
          if(xhr.status === 200 || xhr.status === 304){
              var results = JSON.parse(xhr.responseText);
              opts.success(json);
          }else{
              opts.error();
          }
      }
  };
  
  var query = '';
  for (var key in opts.data){
      query += key + '=' + opts.data[key] + '&';
  }
  query = query.substr(0, query.length-1);
  xhr.open(opts.type, opts.url+query, true);
  xhr.send();
}
  </script>
</body>
</html>

直播課:
關(guān)鍵概念
服務(wù)器
網(wǎng)站

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锦募,隨后出現(xiàn)的幾起案子摆屯,更是在濱河造成了極大的恐慌,老刑警劉巖糠亩,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虐骑,死亡現(xiàn)場離奇詭異,居然都是意外死亡赎线,警方通過查閱死者的電腦和手機(jī)富弦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氛驮,“玉大人,你說我怎么就攤上這事济似〗梅希” “怎么了盏缤?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蓖扑。 經(jīng)常有香客問我唉铜,道長,這世上最難降的妖魔是什么律杠? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任潭流,我火速辦了婚禮,結(jié)果婚禮上柜去,老公的妹妹穿的比我還像新娘灰嫉。我一直安慰自己,他們只是感情好嗓奢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布讼撒。 她就那樣靜靜地躺著,像睡著了一般股耽。 火紅的嫁衣襯著肌膚如雪根盒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天物蝙,我揣著相機(jī)與錄音炎滞,去河邊找鬼。 笑死诬乞,一個胖子當(dāng)著我的面吹牛册赛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丽惭,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼击奶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了责掏?” 一聲冷哼從身側(cè)響起柜砾,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎换衬,沒想到半個月后痰驱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞳浦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年担映,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叫潦。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝇完,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情短蜕,我是刑警寧澤氢架,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站朋魔,受9級特大地震影響岖研,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜警检,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一孙援、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扇雕,春花似錦拓售、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腮鞍,卻和暖如春值骇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背移国。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工吱瘩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迹缀。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓使碾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祝懂。 傳聞我的和親對象是個殘疾皇子票摇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

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

  • 題目1: ajax 是什么?有什么作用砚蓬? 概念:ajax是一種技術(shù)的泛稱矢门,它依賴的是現(xiàn)有的CSS/HTML/Jav...
    saintkl閱讀 245評論 0 0
  • 瀏覽器與服務(wù)器之間,采用HTTP協(xié)議通信灰蛙。用戶在瀏覽器地址欄鍵入一個網(wǎng)址祟剔,或者通過網(wǎng)頁表單向服務(wù)器提交內(nèi)容,這時瀏...
    徐國軍_plus閱讀 364評論 0 4
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,201評論 0 7
  • 我們總說摩梧,要和價(jià)值觀相同的人在一起交流物延,這樣才有話題可聊不會覺得無聊。并且價(jià)值觀相同的人在一起交流還可以減少溝通成...
    五號虎閱讀 215評論 1 0
  • 2017春節(jié)是怎么過的-----我的小白(續(xù)2) 話說今年春節(jié)的計(jì)劃仅父,兒子沒放寒假時原本我們打算帶上小白去見...
    冷雪云閱讀 318評論 4 3