Ajax

Ajax

什么是 ajax

  • 一種由瀏覽器 發起 向 服務器 數據交互 的技術
  • 全稱是 Asynchronous Javascript And XML 翻譯為 異步 js 和 xml

同步 & 異步

  1. 同步是 一種 阻塞 方式的代碼執行過程
代碼按照正常順序就是 阻塞 
console.log(1)
console.log(2)
  1. 異步是 一種 非阻塞 方式的代碼執行過程 如 ajax、setInterval、setTimeout
console.log(0);
setInterval(() => {
  console.log(2);
}, 1000);
console.log(1);

XML

一種類似html的數據格式,表示 數據是以 xml格式 在服務器和瀏覽器上進行傳輸的。 網絡傳輸數據的格式可以大概理解為

  1. XML
  2. JSON 目前的主流方式

XML

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

JSON

JSON 目前的主流方式 - json 是一種類似對象的字符串

json 的全稱為:JavaScript Object Notation,是一種輕量級的數據交互格式

"{"name":"菜鳥教程","url":"www.runoob.com","slogan":"學的不僅是技術,更是夢想!"}"

瀏覽器和服務器交互的流程

  1. 瀏覽器負責發起請求
  2. 服務器負責響應請求

發起ajax的三大關鍵

  1. 請求地址 (URL)

告訴瀏覽器去哪個服務器地址和服務器交互數據

  1. 請求方式

讓瀏覽器選擇合適的方式和服務器交互

3.請求參數

1 可以告訴瀏覽器想要查詢 手機中的 比如蘋果 或者 華為

2 又或者做注冊時 可以把數據提交給服務器

請求地址

請求地址主要是由后端程序員提供給前端工程師的使用的。 一般會通過文檔的方式來告訴前端。

文檔地址

https://docs.apipost.cn/preview/f62dc0b91dc8d8ea/c31d9a50dccf65e3?target_id=de83b57c-d2bc-44ba-9401-f5fa7b060cce#3a601b5f-1d2f-4657-97d1-f807c1e9953f

請求方式

發起ajax的5種方式
序號 請求方式 描述

  1. POST 向服務器新增數據
  2. GET 從服務器獲取數據
  3. DELETE 刪除服務器上的數據
  4. PUT 更新服務器上的數據(側重于完整更新:例如更新用戶的完整信息)
  5. PATCH 更新服務器上的數據(側重于部分更新:例如只更新用戶的手機號)

請求參數

某些數據,必須要傳遞規定給到服務器,才能成功獲取到對應的數據

  1. 做注冊時,你不傳遞個人信息給服務器,服務器無法辦法登記你信息完成注冊
  2. 做查詢數據時,查詢華為手機,你不傳遞如型號、價格、配置,服務器也無法給你返回合適的數據

工作中使用ajax的方式

  1. 原生底層的ajax
  2. 基于 ajax封裝的js庫 (axios,jquery)
  3. 面向現代瀏覽器的fetch

axios

中文官網地址:https://www.axios-http.cn/

英文官網地址:https://www.npmjs.com/package/axios

介紹

GET請求(不帶參數)

  1. 可以在 url上來指定
  2. 可以通過 params 來指定

返回值介紹

可以在 url上傳遞

可以通過 params 來傳遞

GET 請求 (多個參數)

  1. 可以在 url 上來指定 /api/getbooks?bookname=紅樓夢&author=曹雪芹
  2. 可以通過 params 來指定

可以在 url上傳遞

可以通過 params 來傳遞

params 只是讓我們可以傳遞對象格式的參數,axios底層還是會把它轉成 url的方式

POST 請求

在 axios 中,發送 post 請求時,需要在 data 中來傳遞參數


DELETE 請求

DELETE 請求 攜帶的參數 類似 GET 請求,需要在 params 中或者 url 上來添加


PUT 和 PATCH 請求

以上兩個請求和 POST 請求類似,都是在 data 上 傳遞數據

form表單

阻止表單的默認行為

當一個form標簽中出現以下幾個按鈕,點擊按鈕時,會導致頁面刷新

    <form action="">
      <button>會刷新</button>
      <button type="button">會刷新</button>
      <input type="submit" value="會刷新" />
    </form>

解決方案

  1. 給按鈕設置 type = "button"
  2. 給 form 綁定 submit 事件,然后在事件中阻止默認行為
const form = document.querySelector('form');
      form.addEventListener('submit', function (event) {
        event.preventDefault(); //  阻止默認行為
        console.log('不刷新了');
      });

使用JQuery快速獲取表單值

如果表單的字段比較多了,我們使用傳統方式按個獲取表單的值會很麻煩

這個時候可以借助 jQuery 中的 序列化 serialize方法來快速獲取表單數據 serialize 返回的是 a=1&b=2&c=3的數據格式

序列化,其實就是一種把數據 轉成字符串的 說法而已

  <body>
    <form>
      <input id="bookname" type="text" placeholder="請輸入書名" />
      <input id="author" type="text" placeholder="請輸入作者" />
      <input id="publisher" type="text" placeholder="請輸入出版社" />
      <button>提交</button>
   </form>
    <script src="./jquery.js"></script>
    <script>
      const form = document.querySelector('form');
      form.addEventListener('submit', function (event) {
        event.preventDefault(); //  阻止默認行為
        const query=$("form").serialize();
      });
    </script>
  </body>

原生js獲取表單值

 <script>
        const form = document.querySelector('form');
        form.addEventListener('submit', function (event) {
            event.preventDefault();

            const fd = new FormData(this); // this = form dom元素
            const usp = new URLSearchParams(fd);
            const query = usp.toString();
            console.log(query);
        });
    </script>

axios請求方式的簡寫

在實際開發中,常用的 5 種請求方式分別是:

 GET、POST、PUT、PATCH、DELETE

為了簡化開發者的使用過程,axios 為所有支持的請求方法提供了別名:

  • axios.get(url[, config])
  • axios.delete(url[, config])
  • axios.post(url[, data[, config]])
  • axios.put(url[, data[, config]])
  • axios.patch(url[, data[, config]])


axios 基地址和攔截器

基地址

方便我們后期統一修改 URL
修改前

axios({
  url: 'http://www.itcbc.com:3006/api/getbooks',
  method: 'GET',
})

修改后

axios.defaults.baseURL = 'http://www.itcbc.com:3006';

axios({
  url: '/api/getbooks',
  method: 'GET',
})

攔截器

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容