ajax

ajax 是什么?有什么作用?

  1. AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML)劲藐,是一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù)镶柱。它使用:
    使用XHTML+CSS來(lái)標(biāo)準(zhǔn)化呈現(xiàn)摔癣;
    使用XML和XSLT進(jìn)行數(shù)據(jù)交換及相關(guān)操作姑曙;
    使用XMLHttpRequest對(duì)象與Web服務(wù)器進(jìn)行異步數(shù)據(jù)通信襟交;
    使用Javascript操作Document Object Model進(jìn)行動(dòng)態(tài)顯示及交互;
    使用JavaScript綁定和處理所有數(shù)據(jù)伤靠。
  2. 與傳統(tǒng)的web應(yīng)用比較:
    傳統(tǒng)的Web應(yīng)用交互由用戶觸發(fā)一個(gè)HTTP請(qǐng)求到服務(wù)器,服務(wù)器對(duì)其進(jìn)行處理后再返回一個(gè)新的HTHL頁(yè)到客戶端, 每當(dāng)服務(wù)器處理客戶端提交的請(qǐng)求時(shí),客戶都只能空閑等待,并且哪怕只是一次很小的交互婿着、只需從服務(wù)器端得到很簡(jiǎn)單的一個(gè)數(shù)據(jù),都要返回一個(gè)完整的HTML頁(yè),而用戶每次都要浪費(fèi)時(shí)間和帶寬去重新讀取整個(gè)頁(yè)面。這個(gè)做法浪費(fèi)了許多帶寬醋界,由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請(qǐng)求竟宋,應(yīng)用的響應(yīng)時(shí)間就依賴于服務(wù)器的響應(yīng)時(shí)間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多形纺。
    與此不同丘侠,AJAX應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用SOAP或其它一些基于XML的Web Service接口逐样,并在客戶端采用JavaScript處理來(lái)自服務(wù)器的響應(yīng)蜗字。因?yàn)樵诜?wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,結(jié)果我們就能看到響應(yīng)更快的應(yīng)用脂新。同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成挪捕,所以Web服務(wù)器的處理時(shí)間也減少了。
  3. ajax工作原理:
    Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個(gè)中間層(AJAX引擎),使用戶操作與服務(wù)器響應(yīng)異步化争便。并不是所有的用戶請(qǐng)求都提交給服務(wù)器,像—些數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理等都交給Ajax引擎自己來(lái)做, 只有確定需要從服務(wù)器讀取新數(shù)據(jù)時(shí)再由Ajax引擎代為向服務(wù)器提交請(qǐng)求级零。
  4. Ajax其核心有JavaScript、XMLHTTPRequest滞乙、DOM對(duì)象組成奏纪,通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù)斩启,然后用JavaScript來(lái)操作DOM而更新頁(yè)面序调。
    ajax的優(yōu)點(diǎn):
    <1>.無(wú)刷新更新數(shù)據(jù)。
    AJAX最大優(yōu)點(diǎn)就是能在不刷新整個(gè)頁(yè)面的前提下與服務(wù)器通信維護(hù)數(shù)據(jù)兔簇。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互发绢,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒(méi)有改變的信息,減少用戶等待時(shí)間垄琐,帶來(lái)非常好的用戶體驗(yàn)边酒。
    <2>.異步與服務(wù)器通信。
    AJAX使用異步方式與服務(wù)器通信此虑,不需要打斷用戶的操作甚纲,具有更加迅速的響應(yīng)能力。優(yōu)化了Browser和Server之間的溝通朦前,減少不必要的數(shù)據(jù)傳輸介杆、時(shí)間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量。
    <3>.前端和后端負(fù)載平衡韭寸。
    AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端春哨,利用客戶端閑置的能力來(lái)處理,減輕服務(wù)器和帶寬的負(fù)擔(dān)恩伺,節(jié)約空間和寬帶租用成本赴背。并且減輕服務(wù)器的負(fù)擔(dān),AJAX的原則是“按需取數(shù)據(jù)”晶渠,可以最大程度的減少冗余請(qǐng)求和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān)凰荚,提升站點(diǎn)性能。
    <4>.基于標(biāo)準(zhǔn)被廣泛支持褒脯。
    AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)便瑟,不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執(zhí)行番川。隨著Ajax的成熟到涂,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問(wèn)世。同樣颁督,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù)践啄,為那些不支持JavaScript的用戶提供替代功能。
    <5>.界面與應(yīng)用分離沉御。
    Ajax使WEB中的界面與應(yīng)用分離(也可以說(shuō)是數(shù)據(jù)與呈現(xiàn)分離)屿讽,有利于分工合作、減少非技術(shù)人員對(duì)頁(yè)面的修改造成的WEB應(yīng)用程序錯(cuò)誤吠裆、提高效率聂儒、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)。
  5. ajax的缺點(diǎn):
    <1>.AJAX干掉了Back和History功能硫痰,即對(duì)瀏覽器機(jī)制的破壞衩婚。
    <2>.AJAX的安全問(wèn)題。
    <3>.對(duì)搜索引擎支持較弱效斑。
    <4>.AJAX不能很好支持移動(dòng)設(shè)備非春。
    <5>.客戶端過(guò)肥,太多客戶端代碼造成開發(fā)上的成本缓屠。

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

前后端開發(fā)聯(lián)調(diào)需要一起確定接口敌完,前端向后端發(fā)送數(shù)據(jù)或請(qǐng)求的方式(get/post)储耐,前端需要向后端發(fā)送的數(shù)據(jù),前端可以從后臺(tái)獲取到的數(shù)據(jù)滨溉,這些都是需要雙方協(xié)商確定的什湘。
后端接口完成前可以利用server-mock模擬服務(wù)器长赞,通過(guò)制造一些假數(shù)據(jù)來(lái)進(jìn)行交互調(diào)試,保證業(yè)務(wù)能跑通闽撤。

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

思路1:加入標(biāo)識(shí)符哟旗,在未接收到響應(yīng)數(shù)據(jù)的情況下贩据,通過(guò)標(biāo)識(shí)符的狀態(tài)來(lái)防止點(diǎn)擊,這種情況下點(diǎn)擊只會(huì)返回第一次點(diǎn)擊請(qǐng)求的數(shù)據(jù)闸餐。

    var btn = document.querySelector('.query-area button')
    var ct =document.getElementById('ct');
    var page = 0;
    var resultsArray = true;//狀態(tài)標(biāo)識(shí)
    btn.addEventListener('click', function(){
      if(!resultsArray){
        return ;
      }   
       var xhr = new XMLHttpRequest()
       xhr.onreadystatechange = function(){
         if(xhr.readyState === 4){
          if((xhr.status >= 200 &&xhr.status < 300) ||xhr.status === 304){
              var results = JSON.parse(xhr.responseText)
              render(results);
              page+=5;
          }else {
            console.log("獲取數(shù)據(jù)失敗");
          }
         resultsArray = true;
         }
       }
      xhr.open('get', '/getInfo?page='+page+'&len=5', true)
      xhr.send()
     resultsArray = false;
    })

實(shí)現(xiàn)加載更多的功能饱亮,效果范例323,后端在本地使用server-mock來(lái)模擬數(shù)據(jù)

 <div class="detail-area">
    <ul id='ct'>
    </ul>
  </div>
  <div class="query-area">
    <button id='btn'>加載更多</button>   
  </div>
 window.onload=function (argument) {
    var btn = document.querySelector('.query-area button')
    var ct =document.getElementById('ct');
    var page = 0;
    var resultsArray = true;
    btn.addEventListener('click', function(){
      if(!resultsArray){
        return ;
      }
      resultsArray = false;
       var xhr = new XMLHttpRequest()
       xhr.onreadystatechange = function(){
         if(xhr.readyState === 4){
          if((xhr.status >= 200 &&xhr.status < 300) ||xhr.status === 304){
              var results = JSON.parse(xhr.responseText)
              render(results);
              page+=5;
              resultsArray = true;
          }else {
            console.log("獲取數(shù)據(jù)失敗");
          }
          resultsArray = true;
         }
       }
      xhr.open('get', '/getInfo?page='+page+'&len=5', true)
      xhr.send()
      resultsArray=false;
    })
    function render(results){
      var frag = document.createDocumentFragment()
      for(var i = 0; i < results.length; i++){
        var node = document.createElement('li')
        node.innerText = results[i]
        frag.appendChild(node);
      }
      ct.appendChild(frag);
    }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舍沙,一起剝皮案震驚了整個(gè)濱河市近上,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌场勤,老刑警劉巖戈锻,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異和媳,居然都是意外死亡格遭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門留瞳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拒迅,“玉大人,你說(shuō)我怎么就攤上這事她倘¤滴ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵硬梁,是天一觀的道長(zhǎng)前硫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)荧止,這世上最難降的妖魔是什么屹电? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮跃巡,結(jié)果婚禮上危号,老公的妹妹穿的比我還像新娘。我一直安慰自己素邪,他們只是感情好外莲,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兔朦,像睡著了一般偷线。 火紅的嫁衣襯著肌膚如雪磨确。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天淋昭,我揣著相機(jī)與錄音俐填,去河邊找鬼安接。 笑死翔忽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盏檐。 我是一名探鬼主播歇式,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胡野!你這毒婦竟也來(lái)了材失?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤硫豆,失蹤者是張志新(化名)和其女友劉穎龙巨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熊响,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旨别,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汗茄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秸弛。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖洪碳,靈堂內(nèi)的尸體忽然破棺而出递览,到底是詐尸還是另有隱情,我是刑警寧澤瞳腌,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布绞铃,位于F島的核電站,受9級(jí)特大地震影響嫂侍,放射性物質(zhì)發(fā)生泄漏儿捧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一吵冒、第九天 我趴在偏房一處隱蔽的房頂上張望纯命。 院中可真熱鬧,春花似錦痹栖、人聲如沸亿汞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疗我。三九已至咆畏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吴裤,已是汗流浹背旧找。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麦牺,地道東北人钮蛛。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像剖膳,于是被迫代替她去往敵國(guó)和親魏颓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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