AJAX的四種方式(原生JS & jQuery & axios & fetch)

一屁使、原生AJAX

1猎莲、GET請求

GET請求的參數(shù),使用?直接拼接在url地址后面锐锣,如果有多個參數(shù)使用&符號腌闯。
參數(shù)例如:name=${name}&pageIndex=${pageIndex}

// 01.創(chuàng)建xhr對象
let xhr = new XMLHttpRequest()
// 02.初始化請求
xhr.open('GET',`http://localhost:5566/students?name=${name}`)
// 03.發(fā)送請求
xhr.send()
// 04.監(jiān)聽事件,并接收結(jié)果
xhr.onreadystatechange = function(){
     //請求完成
     if(xhr.readyState===4){
         //請求成功
         if(xhr.status===200){      
            console.log(xhr.response);   //打印響應(yīng)結(jié)果
         }
     }
 }

2雕憔、POST請求

(1)設(shè)置Content-Type請求頭

POST請求時姿骏,需要設(shè)置Content-Type請求頭,告訴服務(wù)器傳遞的數(shù)據(jù)格式斤彼。
如果是urlencoded格式的數(shù)據(jù):

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

如果是json字符串格式的數(shù)據(jù):

xhr.setRequestHeader('Content-Type','application/json')

(2)參數(shù)傳遞

post請求的參數(shù)分瘦,在發(fā)送時傳遞。
傳遞urlencoded格式的數(shù)據(jù):

xhr.send(`name=polo&age=35`)

傳遞json字符串格式的數(shù)據(jù):

let params = {
     name:name,
     hobbies:hobbies.split(',')   //愛好琉苇,轉(zhuǎn)為數(shù)組
 }
xhr.send(JSON.stringify(params))   // 將對象轉(zhuǎn)為json格式字符串

(3)基本格式

  let xhr = new XMLHttpRequest()
  xhr.open('POST','http://localhost:5566/deleteStudent')
  xhr.setRequestHeader('Content-Type','application/json')
  xhr.send(JSON.stringify({_id:id}))
  xhr.onreadystatechange = function(){
      if(xhr.readyState===4){
          if(xhr.status===200){
                console.log(xhr.response);
          }
      }
}

二嘲玫、jQuery AJAX

1、GET請求

語法:$.get(請求地址, {參數(shù)名: 參數(shù)值}, 回調(diào)函數(shù))

  $.get('http://localhost:5566/students',{name:"張三"},r=>{
        console.log(r);    // r表示請求成功時返回的結(jié)果數(shù)據(jù)
  })

2并扇、POST請求

語法:$.post(請求地址, {參數(shù)名: 參數(shù)值}, 回調(diào)函數(shù))

  $.post('http://localhost:5566/deleteStudent',{_id:id},r=>{
        console.log(r);    // r表示請求成功時返回的結(jié)果數(shù)據(jù)       
  })

3去团、通用型方法ajax

(1)get請求

            $.ajax({
                type: "get",   // 請求的接口地址
                url: url,      // 請求方式get 或 post
                dataType: "json", // 返回的數(shù)據(jù)類型
                // 請求成功后的回調(diào)函數(shù)
                success: function (r) {
                    console.log(r)
                },
                // 請求失敗后調(diào)用的函數(shù)
                error: function (err) {
                    console.log('請求錯誤')
                }
            });

(2)post請求

發(fā)送post請求時,如果請求參數(shù)是json字符串格式,需要設(shè)置contentType請求頭為'application/json'土陪。contentType默認值 "application/x-www-form-urlencoded"昼汗。

let params = {
         name:name,
         hobbies:hobbies.split(',') 
   }
$.ajax({
         url:url,       // 請求的接口地址
         type:'POST',   // 請求方式get 或 post
         data:JSON.stringify(params),   // 請求的參數(shù)
         contentType:'application/json',
         success:function(r){
             console.log(r);   // r表示請求成功時返回的結(jié)果數(shù)據(jù)
         }
    })

三、axios AJAX

1鬼雀、引入axios庫

axios庫MDN地址

<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>

2顷窒、GET請求

(1)get請求的參數(shù)可以直接用?拼接在URL中

        axios.get('http://localhost:5566/user?ID=12345').then(function (response) {
            console.log(response);
        }).catch(function (error) {
            console.log(error);
        });

(2)get請求的參數(shù)可以寫在params對象中

注意:請求返回結(jié)果包含很多信息源哩,需要將結(jié)果中的data解構(gòu)出來蹋肮。data中存放的才是需要的數(shù)據(jù)。

      axios.get('http://localhost:5566/students', {
            params: {
               name:name
           }
      }).then(({ data }) => {   
           console.log(data)
      })

3璧疗、POST請求

post請求參數(shù)直接寫在對象中傳入。

axios.post(`http://localhost:5566/deleteStudent`, {
      name:name,
      hobbies:hobbies.split(','),
 }).then(({ data }) => {   
         console.log(data)
})

4馁龟、通用方式axios

  axios({     
      method: 'POST',   //請求方法           
      url: '/axios-server',    //url           
      params: {     //請求參數(shù)
          vip: 10,
          level: 30
      },           
      headers: {  //設(shè)置請求頭信息
          a: 100,
          b: 200
      },
      //請求體參數(shù)
      data: {
          username: 'admin',
          password: 'admin'
      }
  }).then(response => {
      console.log(response);
      //響應(yīng)狀態(tài)碼
      console.log(response.status);
      //響應(yīng)狀態(tài)字符串
      console.log(response.statusText);
      //響應(yīng)頭信息
      console.log(response.headers);
      //響應(yīng)體
      console.log(response.data);
  })

四崩侠、fetch AJAX

1、fetch定義

fetch是一個瀏覽器內(nèi)置的全新的請求API坷檩。之前我們使用的jquery和axios的請求方法只是對XMLHttpRequest對象的封裝却音。
fetch()函數(shù)的第一個參數(shù)是url地址,第二個參數(shù)是配置對象矢炼。

2系瓢、GET請求

GET請求的參數(shù),使用?直接拼接在url地址后面句灌,如果有多個參數(shù)使用&符號夷陋。

fetch(`http://localhost:5566/students?stuName=${stuName}`,{
      method:'GET',    //設(shè)置請求方式(默認是GET)
 }).then(response=>{
    // 第一個then,用于返回請求的狀態(tài)信息(檢查請求是否成功等等)
    // 再通過請求狀態(tài)對象的.json()方法胰锌,返回請求結(jié)果
     return response.json()
 }).then(r =>{
     console.log(r)   // 返回請求結(jié)果
 })

3骗绕、POST請求

發(fā)送post請求時,請求參數(shù)如果是json字符串格式资昧,需要配置請求頭headers酬土,設(shè)置Content-Type為'application/json'。

  let params = {
      name:name,
      hobbies:hobbies.split(','),
  }
  fetch(url,{
      method:'POST',
      //配置請求頭信息
      headers:{
          'Content-Type':'application/json'
      },
      body:JSON.stringify(params)   // post請求參數(shù)
  }).then(r=>{
      return r.json()
  }).then(r=>{
      console.log(r)   // 返回請求結(jié)果
  })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末格带,一起剝皮案震驚了整個濱河市撤缴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叽唱,老刑警劉巖屈呕,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尔觉,居然都是意外死亡凉袱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來专甩,“玉大人钟鸵,你說我怎么就攤上這事〉佣悖” “怎么了棺耍?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長种樱。 經(jīng)常有香客問我蒙袍,道長,這世上最難降的妖魔是什么嫩挤? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任害幅,我火速辦了婚禮,結(jié)果婚禮上岂昭,老公的妹妹穿的比我還像新娘以现。我一直安慰自己,他們只是感情好约啊,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布邑遏。 她就那樣靜靜地躺著,像睡著了一般恰矩。 火紅的嫁衣襯著肌膚如雪记盒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天外傅,我揣著相機與錄音纪吮,去河邊找鬼。 笑死萎胰,一個胖子當(dāng)著我的面吹牛彬碱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奥洼,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼巷疼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灵奖?” 一聲冷哼從身側(cè)響起嚼沿,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓷患,沒想到半個月后骡尽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡擅编,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年攀细,在試婚紗的時候發(fā)現(xiàn)自己被綠了箫踩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡谭贪,死狀恐怖境钟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俭识,我是刑警寧澤慨削,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站套媚,受9級特大地震影響缚态,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堤瘤,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一玫芦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧本辐,春花似錦姨俩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽调窍。三九已至宝冕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邓萨,已是汗流浹背地梨。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缔恳,地道東北人宝剖。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像歉甚,于是被迫代替她去往敵國和親万细。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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