ajax 增刪改查

查詢

  <script src="./lib/axios.js"></script>
    <script>
      // 請(qǐng)求地址  http://www.itcbc.com:3006/api/getbooks
      // 請(qǐng)求方式 GET
      // 請(qǐng)求參數(shù) 可以不傳

      axios({
        // 請(qǐng)求地址
        url: 'http://www.itcbc.com:3006/api/getbooks',
        // 請(qǐng)求方式
        method: 'GET',
        // 請(qǐng)求參數(shù)  可以不傳
      }).then(function (result) {
        // 我們的數(shù)據(jù) 響應(yīng)回來了  .then 里面的函數(shù)就會(huì)觸發(fā)  result 擁有了后臺(tái)響應(yīng)的數(shù)據(jù)
        console.log(result.data.data);
      });
    </script>

ajax-把數(shù)據(jù)獲取到前端

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>02-ajax-把數(shù)據(jù)獲取到前端而已.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      table {
        width: 80%;
        margin: 100px auto;
        border-collapse: collapse;
      }
      th,
      td {
        padding: 20px;
        text-align: center;
        color: #fff;
      }
      /* 奇數(shù) */
      tr:nth-child(odd) {
        background-color: #000;
      }
      /* 偶數(shù) */
      tr:nth-child(even) {
        background-color: #333;
      }
    </style>
  </head>
  <body>
    <!-- 
      顯示 真實(shí) 的 圖片列表信息 顯示到 表格中 
     -->
    <table border="1">
      <thead>
        <tr>
          <th>ID</th>
          <th>書名</th>
          <th>作者</th>
          <th>出版社</th>
        </tr>
      </thead>
      <tbody></tbody>
    </table>

    <script src="./lib/axios.js"></script>
    <script>
      /* 
       請(qǐng)求的三大關(guān)鍵
       1 地址 http://www.itcbc.com:3006/api/getbooks
       2 方式 GET
       3 參數(shù) 無
        */
      axios({
        url: 'http://www.itcbc.com:3006/api/getbooks',
        method: 'GET',
      }).then((result) => {
        // console.log(result);
        // 獲取返回?cái)?shù)據(jù) 數(shù)組
        const arr = result.data.data;
        // console.log(arr);

        // map 將源數(shù)組 修改 返回成 新的數(shù)組
        // join 數(shù)組轉(zhuǎn)成字符串
        const html = arr
          .map(
            (value) => `<tr>
          <td>${value.id}</td>
          <td>${value.bookname}</td>
          <td>${value.author}</td>
          <td>${value.publisher}</td>
        </tr>`
          )
          .join('');
        document.querySelector('tbody').innerHTML = html;
      });
    </script>
  </body>
</html>

get請(qǐng)求

  <script src="./lib/axios.js"></script>
    <script>
      /* 
      axios 發(fā)送get請(qǐng)求 攜帶參數(shù)  兩種方式
      1 直接在url上拼接 即可  演示 
      2 在params 對(duì)象中攜帶 


      請(qǐng)求的三大關(guān)鍵
      1 請(qǐng)求的地址 http://www.itcbc.com:3006/api/getbooks
      2 請(qǐng)求的方式 GET
      3 請(qǐng)求的參數(shù) 
         1 bookname=紅樓夢(mèng)
      
       */

      axios({
        //  請(qǐng)求參數(shù)  英文的符號(hào)為分割
        //  ?  前面部分是正常的url
        // ? 后面的參數(shù)部分   a=1&b=2
        url: 'http://www.itcbc.com:3006/api/getbooks?bookname=斗破蒼穹134&author=我自己',
        method: 'GET',
      }).then(result=>{
        console.log(result);
      })
    </script>

get請(qǐng)求帶參數(shù)

<script src="./lib/axios.js"></script>
    <script>
      /* 
      axios 發(fā)送get請(qǐng)求 攜帶參數(shù)  兩種方式
      1 直接在url上拼接 即可  演示 
        http://www.itcbc.com:3006/api/getbooks?bookname=斗破蒼穹134&author=我自己
      2 在params 對(duì)象中攜帶  本質(zhì) 也是 幫我們將對(duì)象 轉(zhuǎn)成了字符串 然后拼接在 url上 

      3 實(shí)際開發(fā)中 兩種傳遞參數(shù)的方式 都常用的   哪種寫代碼方便就使用哪個(gè)3膛痢3芴ā达址! 
       */

      axios({
        url: 'http://www.itcbc.com:3006/api/getbooks',
        method: 'GET',
        params: {
          bookname: '斗破蒼穹134',
          author: '土豆',
        },
      }).then((result) => {
        console.log(result);
      });
    </script>

快速增加數(shù)據(jù)

 <script src="./lib/axios.js"></script>
    <script>
      for (let index = 0; index < 10; index++) {
        axios({
          url: 'http://www.itcbc.com:3006/api/addbook',
          method: 'POST',
          data: {
            bookname: '演示' + index,
            author: '我自己你不知道' + index,
            publisher: '斑馬出版社' + index,
            // 改為只有自己知道的key 長(zhǎng)度 6-20
            appkey: 'bbccddaaa',
          },
        });
      }
    </script>

查詢屬于自己的數(shù)據(jù)

<script src="./lib/axios.js"></script>
    <script>
      /* 
      1 先寫好 靜態(tài)結(jié)構(gòu) 
      2 一打開頁面的時(shí)候 希望看見 完整的數(shù)據(jù)
        1 發(fā)送一次請(qǐng)求 網(wǎng)絡(luò)請(qǐng)求  
          沒有攜帶 書名 參數(shù) 
      3 點(diǎn)擊了按鈕
        1 獲取輸入框的值
        2 拼接成 請(qǐng)求參數(shù)  
        3 發(fā)送一次新的 網(wǎng)絡(luò)請(qǐng)求   有攜帶 書名 參數(shù) 

      4 優(yōu)化
        程序帶不帶參數(shù) 希望  傳參來實(shí)現(xiàn) 
      
       */

      //  發(fā)送網(wǎng)絡(luò)請(qǐng)求 獲取數(shù)據(jù) 渲染頁面
      function render(bn) {
        // bn 第一次調(diào)用render的時(shí)候 沒有傳參 bn =  undefined
        // bn  點(diǎn)擊按鈕的 bn 等于 輸入框的值  "演示2"
        let params = {
          appkey: 'vasdfds3',
        };
        if (bn) {
          // 你知道有哪些 數(shù)據(jù) 轉(zhuǎn)成 布爾類型之后 是 false 嗎
          // 0 false "" undefined null NaN
          //  不是 undefined
          params.bookname = bn;
        }

        axios({
          url: 'http://www.itcbc.com:3006/api/getbooks',
          method: 'GET',
          params: params,
        }).then((result) => {
          const arr = result.data.data;
          const html = arr
            .map(
              (value) => `<tr>
          <td>${value.id}</td>
          <td>${value.bookname}</td>
          <td>${value.author}</td>
          <td>${value.publisher}</td>
        </tr>`
            )
            .join('');
          document.querySelector('tbody').innerHTML = html;
        });
      }

      // 2 發(fā)送請(qǐng)求 獲取數(shù)據(jù)渲染頁面
      render();

      // 3 獲取按鈕
      const input = document.querySelector('input');
      const button = document.querySelector('button');
      button.addEventListener('click', function () {
        // 獲取輸入框值
        const bookname = input.value;
        render(bookname); // 把參數(shù)傳遞過去即可
      });
    </script>

post請(qǐng)求

<script src="./lib/axios.js"></script>
    <script>
      /* 
      post 新增數(shù)據(jù) 
      請(qǐng)求的三大關(guān)鍵
      1 請(qǐng)求的地址  http://www.itcbc.com:3006/api/addbook
      2 請(qǐng)求的方式  POST
      3 請(qǐng)求的參數(shù) data 來傳遞 
       */

       axios({
         url:"http://www.itcbc.com:3006/api/addbook",
         method:"POST",
         data:{
          bookname:"從入門到出去",
          // bookname:"1",
          author:"黑馬77",
          publisher:"白馬",
          appkey:"sdfr34343"
         }
       })
       .then(result=>{
         console.log(result);
       })


    </script>

添加書籍

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>09-添加書籍.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      .form {
        margin: 100px auto;
        width: 600px;
        padding: 20px;
        border: 1px solid #ccc;
      }
      input {
        width: 100%;
        height: 50px;
        border-radius: 10px;
        margin: 15px 0;
      }
    </style>
  </head>
  <body>
    <div class="form">
      <input id="bookname" type="text" placeholder="請(qǐng)輸入書籍" />
      <input id="author" type="text" placeholder="請(qǐng)輸入作者" />
      <input id="publisher" type="text" placeholder="請(qǐng)輸入出版社" />
      <input id="btn" type="button" value="新增" />
    </div>
    <script src="./lib/axios.js"></script>
    <script>
      /*
      1 靜態(tài)結(jié)構(gòu)
      2 給 “新增”  綁定點(diǎn)擊事件
      3 事件觸發(fā)了
        獲取到一些數(shù)據(jù) 書籍名稱龄章、作者疚顷、出版社  appkey
        把數(shù)據(jù) 寫到 axios data屬性 來完成 添加 數(shù)據(jù)功能

       */

      const booknameDom = document.querySelector('#bookname');
      const authorDom = document.querySelector('#author');
      const publisherDom = document.querySelector('#publisher');
      const btnDom = document.querySelector('#btn');

      btnDom.addEventListener('click', function () {
        const bookname = booknameDom.value;
        const author = authorDom.value;
        const publisher = publisherDom.value;
        const appkey = 'vasdfds3';

        // es6 簡(jiǎn)寫的語法
        const data = { bookname, author, publisher, appkey };

        // 請(qǐng)求的地址 請(qǐng)求的方式  請(qǐng)求的參數(shù)
        axios({
          url: 'http://www.itcbc.com:3006/api/addbook',
          method: 'POST',
          data,
        }).then((result) => {
          console.log(result);
        });
      });
    </script>
  </body>
</html>

圖書刪除(彈出確認(rèn)框)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>01-圖書-刪除</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      table {
        width: 80%;
        margin: 100px auto;
        border-collapse: collapse;
      }
      th,
      td {
        padding: 20px;
        text-align: center;
        color: #fff;
      }
      /* 奇數(shù) */
      tr:nth-child(odd) {
        background-color: #000;
      }
      /* 偶數(shù) */
      tr:nth-child(even) {
        background-color: #333;
      }
    </style>
  </head>
  <body>
    <table border="1">
      <thead>
        <tr>
          <th>ID</th>
          <th>書名</th>
          <th>作者</th>
          <th>出版社</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody></tbody>
    </table>

    <script src="./lib/axios.js"></script>
    <script>
      // 彈出確認(rèn)框  用戶點(diǎn)擊
      // 確定   confirm 會(huì)返回true
      // 取消   confirm 會(huì)返回false
      // if (confirm('您確認(rèn)刪除嗎')) {
      //   console.log('要?jiǎng)h除');
      // } else {
      //   console.log('取消刪除');
      // }

      /*
      1 調(diào)整 靜態(tài)結(jié)構(gòu) 增加一列 刪除
      2 給刪除按鈕綁定點(diǎn)擊事件 (異步的原因?qū)е挛覀儧]有辦法獲取到dom元素 )
        1 在確保有標(biāo)簽的情況下你再去獲取 dom元素  不夠優(yōu)雅
        2 事件委托T靶馈!  笨奠。管呵。
          1 找一個(gè) 刪除按鈕的父元素(一直存在網(wǎng)頁中 不是動(dòng)態(tài)生成)

      3 點(diǎn)擊事件觸發(fā)了
        1 先彈出一個(gè)確認(rèn)框 來詢問用戶 您是否確定刪除
          confirm 確認(rèn)框    alert 提示信息
          if (confirm('您確認(rèn)刪除嗎'))
        2 刪除數(shù)據(jù)(通過某種方式 來告訴服務(wù)器 服務(wù)器刪除數(shù)據(jù)) - 和服務(wù)器通信  ajax  5種方式 get post delete put patch
          1 請(qǐng)求方式 delete
          2 請(qǐng)求地址 http://www.itcbc.com:3006/api/delbook
          3 請(qǐng)求的參數(shù)
            id
            appkey
       */

      //  ajax 異步
      // 當(dāng)我們開始調(diào)用  axios 只是表示 發(fā)送了一個(gè)網(wǎng)絡(luò)請(qǐng)求  不表示 數(shù)據(jù)馬上響應(yīng)回來
      // 也不表示頁面馬上就會(huì)有數(shù)據(jù)

      axios({
        url: 'http://www.itcbc.com:3006/api/getbooks',
        method: 'GET',
        params: {
          appkey: 'bbccddaaa',
        },
      }).then((result) => {
        const arr = result.data.data;

        const html = arr
          .map(
            (value) => `<tr>
          <td>${value.id}</td>
          <td>${value.bookname}</td>
          <td>${value.author}</td>
          <td>${value.publisher}</td>
          <td><button class="delete-btn" >刪除</button></td>
        </tr>`
          )
          .join('');
        document.querySelector('tbody').innerHTML = html; // 網(wǎng)頁中 肯定有標(biāo)簽
      });

      // 2 獲取 刪除按鈕的 父元素 tbody
      const tbody = document.querySelector('tbody');
      tbody.addEventListener('click', function (event) {
        // 判斷你當(dāng)前點(diǎn)擊的 dom元素 是不是我們想要?jiǎng)h除按鈕
        if (event.target.className === 'delete-btn') {
          // 判斷 用戶 點(diǎn)擊 刪除還是取消
          if (confirm('您確定刪除嗎')) {
            console.log('要?jiǎng)h除');
          } else {
            console.log('取消刪除');
          }
        }
      });
    </script>
  </body>
</html>

圖書編輯完成

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>02-圖書-編輯</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      table {
        width: 80%;
        margin: 100px auto;
        border-collapse: collapse;
      }
      th,
      td {
        padding: 20px;
        text-align: center;
        color: #fff;
      }
      /* 奇數(shù) */
      tr:nth-child(odd) {
        background-color: #000;
      }
      /* 偶數(shù) */
      tr:nth-child(even) {
        background-color: #333;
      }
      .main {
        height: 100vh;
        display: flex;
      }
      .left {
        flex: 2;
      }
      .right {
        flex: 1;
        background-color: sandybrown;
      }
      .form {
        border: 1px solid #ccc;
        width: 80%;
        margin: 100px auto;
        padding: 20px;
      }
      .form input {
        width: 100%;
        height: 50px;
        margin: 15px 0;
      }
    </style>
  </head>
  <body>
    <div class="main">
      <div class="left">
        <table border="1">
          <thead>
            <tr>
              <th>ID</th>
              <th>書名</th>
              <th>作者</th>
              <th>出版社</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody></tbody>
        </table>
      </div>
      <div class="right">
        <div class="form">
          <input id="bookname" type="text" placeholder="請(qǐng)輸入書名" />
          <input id="author" type="text" placeholder="請(qǐng)輸入作者" />
          <input id="publisher" type="text" placeholder="請(qǐng)輸入出版社" />
          <input id="btn" type="button" value="確認(rèn)編輯" />
        </div>
      </div>
    </div>

    <script src="./lib/axios.js"></script>
    <script>
      /* 
       1 點(diǎn)擊編輯按鈕  獲取到 被點(diǎn)擊的按鈕 對(duì)應(yīng)的數(shù)據(jù) 將他們顯示到 表單中 
         被點(diǎn)擊的按鈕 對(duì)應(yīng)的數(shù)據(jù) 梳毙??捐下? 
         1 前端自己去獲取標(biāo)簽中的數(shù)據(jù) 將他們顯示到 新表單中  不建議
         2 通用的做法 
          1 獲取到待編輯的數(shù)據(jù)的 id 根據(jù)id 再去發(fā)送一個(gè)網(wǎng)絡(luò)請(qǐng)求 返回對(duì)應(yīng)的數(shù)據(jù) 
            const obj={ 
              bookname,id,author,publisher
            }
            obj.bookname

        2 獲取到被編輯的按鈕的 數(shù)據(jù) 的id   獲取對(duì)應(yīng)的數(shù)據(jù) 
      
      
      
      
       */
      function render() {
        axios({
          url: 'http://www.itcbc.com:3006/api/getbooks',
          method: 'GET',
          params: {
            appkey: 'bbccddaaa',
          },
        }).then((result) => {
          const arr = result.data.data;
          const html = arr
            .map(
              (value) => `<tr>
          <td>${value.id}</td>
          <td>${value.bookname}</td>
          <td>${value.author}</td>
          <td>${value.publisher}</td>
          <td><button class="update-btn" data-id="${value.id}" >編輯</button></td>
        </tr>`
            )
            .join('');
          document.querySelector('tbody').innerHTML = html;
        });
      }

      render();

      const bookname = document.querySelector('#bookname');
      const author = document.querySelector('#author');
      const publisher = document.querySelector('#publisher');
      const btn = document.querySelector('#btn');

      // 2 獲取編輯按鈕  事件委托
      const tbody = document.querySelector('tbody');
      let id;
      tbody.addEventListener('click', function (event) {
        // 判斷當(dāng)前點(diǎn)擊的是不是編輯按鈕
        if (event.target.className === 'update-btn') {
          //  來獲取到 被點(diǎn)擊的 那一些數(shù)據(jù)
          //  const id=event.target.dataset.id;
          id = event.target.dataset.id;
          // axios get請(qǐng)求 圖片數(shù)據(jù)
          axios({
            url: 'http://www.itcbc.com:3006/api/getbooks',
            method: 'GET',
            params: {
              id,
              appkey: 'bbccddaaa',
            },
          }).then((result) => {
            // console.log(result);
            const obj = result.data.data[0];
            bookname.value = obj.bookname;
            author.value = obj.author;
            publisher.value = obj.publisher;
          });
        }
      });

      // 3 給 確認(rèn)編輯  綁定點(diǎn)擊事件
      btn.addEventListener('click', function () {
        //   發(fā)送一個(gè)編輯 網(wǎng)絡(luò)請(qǐng)求  (地址顿天、方式、參數(shù))
        // 請(qǐng)求地址 http://www.itcbc.com:3006/api/updatebook
        // 請(qǐng)求方式  PUT
        // 請(qǐng)求參數(shù)  put請(qǐng)求 攜帶的參數(shù) 放到data
        // id 書名 作者 出版社 appkey  appkey: 'bbccddaaa',
        const booknameValue = bookname.value;
        const authorValue = author.value;
        const publisherValue = publisher.value;
        // id 設(shè)置一個(gè)全局變量即可
        console.log(id);

        axios({
          url: 'http://www.itcbc.com:3006/api/updatebook',
          method: 'PUT',
          data: {
            bookname: booknameValue,
            author: authorValue,
            publisher: publisherValue,
            id,
            appkey: 'bbccddaaa',
          },
        })
        .then(result=>{
          // 修改成功 看見最新的數(shù)據(jù) 
          render();
        })
      });
    </script>
  </body>
</html>

如何區(qū)分不同的請(qǐng)求方式攜帶參數(shù)寫在data還是params

  1. 看文檔  
    Query 參數(shù) url上或者params上 
    body 參數(shù)  data 
  2. 默認(rèn)
    1. get請(qǐng)求  url或者params 
    2. post請(qǐng)求  data 
    3. delete蔑担、put、patch  結(jié)合文檔來看
      1. delete 和 get 類似
      2. put patch post 類似 
  3. 試試就知道了Q拾住F∥铡!
點(diǎn)擊按鈕的時(shí)候 網(wǎng)頁 以為你要做 整頁數(shù)據(jù)提交 (在ajax出現(xiàn)之前 前端向后端提交數(shù)據(jù)的方式>Э颉排抬! )
  1. 如果按照提交數(shù)據(jù)給服務(wù)器來說  現(xiàn)在的前端 不需要用到 form表單和input標(biāo)簽的name屬性 
  2. 如果網(wǎng)頁的表單 input特別多  form表單和name有另外一個(gè)作用 
     可以快速來獲取表單的數(shù)據(jù) 

  
  3. 解決 form表單和按鈕在一起刷新的問題 
    1.  type="button"
    2.  刷新 是form 的默認(rèn)行為  - 阻止 默認(rèn)行為  方式2 
       1. form 有一個(gè)事件  submit 嗎 (當(dāng)頁面執(zhí)行提交數(shù)據(jù)) 
  <form>
      <input type="text" name="username" placeholder="請(qǐng)輸入用戶名" />
      <input type="text" name="password" placeholder="請(qǐng)輸入密碼" />

      <button type="submit">登錄</button>
      <button>登錄</button>
      <input type="submit" value="也是提交">
    </form>
    <script>
      const form = document.querySelector('form');
      // const button = document.querySelector('button');
      // button.addEventListener('click', function () {
      // console.log('按鈕被點(diǎn)擊啦');
      // });

      form.addEventListener('submit', function (event) {
        event.preventDefault(); // 阻止 默認(rèn)行為
        console.log('表單提交 但是不刷新');
      });

字符串格式數(shù)據(jù)獲取

<pre class="" style="box-sizing: inherit; overflow: auto hidden; font-family: consolas, Courier, &quot;MS Courier New&quot;, monospace; tab-size: 4; color: rgb(51, 51, 51); border: none; border-radius: 0px; margin: 0px; padding: 10px 0px; font-size: 12px !important; line-height: 16px !important; white-space: pre; overflow-wrap: normal; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

 <script src=["./lib/axios.js"](https://gitee.com/ukSir/front-end-77/blob/ajax%E7%AC%AC2%E5%A4%A9/lib/axios.js)></script>

    <script>

      axios({

        url: 'http://www.itcbc.com:3006/api/addbook',

        method: 'POST',

        // data: {

        //   bookname: '演示',

        //   author: '我自己你不知道',

        //   publisher: '斑馬出版社',

        //   appkey: 'bbccddaaa',

        // },

        data: 'bookname=演示&author=我自己你不知道&publisher=斑馬出版社&appkey=bbcc33aaa',

      }).then(result=>{

        console.log(result);

      })

    </script>

</pre>

快速獲取表單的值 jq

<pre class="" style="box-sizing: inherit; overflow: auto hidden; font-family: consolas, Courier, &quot;MS Courier New&quot;, monospace; tab-size: 4; color: rgb(51, 51, 51); border: none; border-radius: 0px; margin: 0px; padding: 10px 0px; font-size: 12px !important; line-height: 16px !important; white-space: pre; overflow-wrap: normal; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

 <body>

    <form>

      <input type="text" name="username1" /><input

        type="text"

        name="username2"

      /><input type="text" name="username3" /><input

        type="text"

        name="username4"

      /><input type="text" name="username5" /><input

        type="text"

        name="username6"

      /><input type="text" name="username7" /><input

        type="text"

        name="username8"

      /><input type="text" name="username9" /><input

        type="text"

        name="username10"

      />

      <button>獲取表單數(shù)據(jù)</button>

    </form>

    <!-- 引入jq的  -->

    <script src=["./lib/jquery.js"](https://gitee.com/ukSir/front-end-77/blob/ajax%E7%AC%AC2%E5%A4%A9/lib/jquery.js)></script>

    <script>

      const form = document.querySelector('form');

      form.addEventListener('submit', function (event) {

        event.preventDefault();

        const query = $('form').serialize();

        console.log(query);

      });

    </script>

  </body>

</pre>

原生js獲取

 <body>
    <form>
      <input type="text" name="username1" /><input
        type="text"
        name="username2"
      /><input type="text" name="username3" /><input
        type="text"
        name="username4"
      /><input type="text" name="username5" /><input
        type="text"
        name="username6"
      /><input type="text" name="username7" /><input
        type="text"
        name="username8"
      /><input type="text" name="username9" /><input
        type="text"
        name="username10"
      />
      <button>獲取表單數(shù)據(jù)</button>
    </form>

    <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>
  </body>

formdata對(duì)象

 <script>
      /* 
      FormData 
      1 FormData 構(gòu)造函數(shù)  可以new 出一個(gè)實(shí)例
      2 FormData 可以存放一些數(shù)據(jù)的實(shí)例(不像普通的obj)
      3 調(diào)用方法 append(key,value)  添加數(shù)據(jù)
      4 FormData 不像普通的對(duì)象 可以直接打印看數(shù)據(jù) 它比較害羞 打印 它
        1 通過 forEach 方法來遍歷 FormData  挨個(gè)來查看里面的數(shù)據(jù) 
       */
      const fd = new FormData();

      fd.append("username","悟空");// 添加數(shù)據(jù)
      // fd.append("height","180");// 添加數(shù)據(jù)
      // fd.append("文件名稱",文件);// 添加數(shù)據(jù)


      fd.forEach((value,key)=>{
        console.log("你要查看的屬性名是",key,"屬性值是",value);
      })

     
    </script>

使用FormData快速獲取表單的數(shù)據(jù)

<body>
    <form>
      <input type="text" name="username" value="111" />
      <input type="text" name="password" value="222" />
      <button>獲取數(shù)據(jù)</button>
    </form>
    <script>
      const form = document.querySelector('form');
      form.addEventListener('submit', function (event) {
        event.preventDefault();

        // const fd=new FormData(傳入一個(gè)form的dom元素);
        // const fd=new FormData(form);
        const fd = new FormData(this);

        const list = [];
        fd.forEach((value, key) => {
          list.push(`${key}=${value}`);
        });
        // console.log(list);
        const query = list.join('&');
        console.log(query);
      });
    </script>
  </body>

URLSearchParams對(duì)象

  <body>
    <form>
      <input type="text" name="username" value="111" />
      <input type="text" name="password" value="222" />
      <button>獲取數(shù)據(jù)</button>
    </form>
    <script>
      const form = document.querySelector('form');
      form.addEventListener('submit', function (event) {
        event.preventDefault();

        // 1 快速把form標(biāo)簽中的表單 獲取到 存在 formdata對(duì)象中
        const fd = new FormData(this);

        // 2 把formdata中的表單數(shù)據(jù) 存在  usp對(duì)象
        const usp = new URLSearchParams(fd);
        // 3 usp對(duì)象 有一個(gè)方法 專門把數(shù)據(jù)轉(zhuǎn)成 字符串參數(shù)形式  toString()
        const query = usp.toString();
        console.log(query);
      });

      function toQuery(form) {
        const fd = new FormData(form);
        const usp = new URLSearchParams(fd);
        const query = usp.toString();
        return query;
      }
    </script>
  </body>

axios發(fā)送請(qǐng)求的簡(jiǎn)寫方式

<pre class="" style="box-sizing: inherit; overflow: auto hidden; font-family: consolas, Courier, &quot;MS Courier New&quot;, monospace; tab-size: 4; color: rgb(51, 51, 51); border: none; border-radius: 0px; margin: 0px; padding: 10px 0px; font-size: 12px !important; line-height: 16px !important; white-space: pre; overflow-wrap: normal; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

 <script src=["./lib/axios.js"](https://gitee.com/ukSir/front-end-77/blob/ajax%E7%AC%AC2%E5%A4%A9/lib/axios.js)></script>

    <script>

      // 利用axios來發(fā)送一個(gè)get請(qǐng)求

      // axios({

      //   url: 'http://www.itcbc.com:3006/api/getbooks',

      //   method: 'GET',

      // }).then((result) => {

      //   console.log(result);

      // });

      // get 請(qǐng)求的簡(jiǎn)寫方式

      // axios.get('http://www.itcbc.com:3006/api/getbooks').then((result) => {

      //   console.log(result);

      // });

      // get 請(qǐng)求的簡(jiǎn)寫方式  攜帶參數(shù)  把正確的寫法 存一份  筆記!授段!

      // axios

      //   .get('http://www.itcbc.com:3006/api/getbooks', {

      //     params: { appkey: 'bbccddaaa' },

      //   })

      //   .then((result) => {

      //     console.log(result);

      //   });

      // post 簡(jiǎn)寫

      // axios.post("url",參數(shù)對(duì)象)

      axios

        .post('http://www.itcbc.com:3006/api/addbook', {

          bookname: '演示ttt',

          author: '我自己你不知道ttt',

          publisher: '斑馬出版社ttt',

          // 改為只有自己知道的key 長(zhǎng)度 6-20

          appkey: 'bbccddaaa',

        })

        .then((result) => {

          console.log(result);

        });

    </script>

</pre>

axios的基地址的設(shè)置

<pre class="" style="box-sizing: inherit; overflow: auto hidden; font-family: consolas, Courier, &quot;MS Courier New&quot;, monospace; tab-size: 4; color: rgb(51, 51, 51); border: none; border-radius: 0px; margin: 0px; padding: 10px 0px; font-size: 12px !important; line-height: 16px !important; white-space: pre; overflow-wrap: normal; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

 <script src=["./lib/axios.js"](https://gitee.com/ukSir/front-end-77/blob/ajax%E7%AC%AC2%E5%A4%A9/lib/axios.js)></script>

    <script>

      // 定義 axios基地址

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

      axios

        .get('/api/getbooks', {

          params: { appkey: 'bbccddaaa' },

        })

        .then((result) => {

          console.log(result);

        });

    </script>

</pre>

把圖片文件加載到瀏覽器中顯示出來

 <body>
    <input type="file" name="" id="" />
    <img src="" alt="" />
    <script>
      const input = document.querySelector('input');
      const img = document.querySelector('img');
      // change事件 觸發(fā)時(shí)期 : 文件加載到瀏覽器內(nèi)存中 觸發(fā)
      input.addEventListener('change', function () {
        // files屬性查看文件
        // console.log(this.files);

        // 獲取到圖片在內(nèi)存中的地址
        // URL.createObjectURL(你想要獲取誰的內(nèi)存地址)  返回 內(nèi)存中的 文件地址
        const url = URL.createObjectURL(this.files[0]);

        // 把內(nèi)存中的圖片 的地址 設(shè)置給 真正的圖片標(biāo)簽
        img.src = url;

        console.log(url);
      });
    </script>
  </body>

把文件發(fā)送給服務(wù)器

<pre class="" style="box-sizing: inherit; overflow: auto hidden; font-family: consolas, Courier, &quot;MS Courier New&quot;, monospace; tab-size: 4; color: rgb(51, 51, 51); border: none; border-radius: 0px; margin: 0px; padding: 10px 0px; font-size: 12px !important; line-height: 16px !important; white-space: pre; overflow-wrap: normal; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

<body>

    <input type="file" name="" id="" />

    <img src="" alt="" />

    <script src=["./lib/axios.js"](https://gitee.com/ukSir/front-end-77/blob/ajax%E7%AC%AC2%E5%A4%A9/lib/axios.js)></script>

    <script>

      const input = document.querySelector('input');

      const img = document.querySelector('img');

      input.addEventListener('change', function () {

        const url = URL.createObjectURL(this.files[0]);

        img.src = url;

        // 使用formData來包裝數(shù)據(jù)

        const fd = new FormData();

        // 添加數(shù)據(jù)

        // fd.append("avatar",文件)

        fd.append('avatar', this.files[0]);

        // 請(qǐng)求三大關(guān)鍵

        // url  method  data

        // axios.post("http://www.itcbc.com:3006/api/formdata",{a:1,b:2})

        axios

          .post('http://www.itcbc.com:3006/api/formdata', fd)

          .then((result) => {

            console.log(result);

          });

      });

    </script>

  </body>

</pre>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹲蒲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子侵贵,更是在濱河造成了極大的恐慌届搁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窍育,死亡現(xiàn)場(chǎng)離奇詭異卡睦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漱抓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門表锻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乞娄,你說我怎么就攤上這事瞬逊。” “怎么了仪或?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵确镊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我溶其,道長(zhǎng)骚腥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任瓶逃,我火速辦了婚禮束铭,結(jié)果婚禮上廓块,老公的妹妹穿的比我還像新娘。我一直安慰自己契沫,他們只是感情好带猴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懈万,像睡著了一般拴清。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上会通,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天口予,我揣著相機(jī)與錄音,去河邊找鬼涕侈。 笑死沪停,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裳涛。 我是一名探鬼主播木张,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼端三!你這毒婦竟也來了舷礼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤郊闯,失蹤者是張志新(化名)和其女友劉穎妻献,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體团赁,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旋奢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了然痊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片至朗。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剧浸,靈堂內(nèi)的尸體忽然破棺而出锹引,到底是詐尸還是另有隱情,我是刑警寧澤唆香,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布嫌变,位于F島的核電站,受9級(jí)特大地震影響躬它,放射性物質(zhì)發(fā)生泄漏腾啥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倘待。 院中可真熱鬧疮跑,春花似錦、人聲如沸凸舵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啊奄。三九已至渐苏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菇夸,已是汗流浹背琼富。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庄新,地道東北人公黑。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像摄咆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子人断,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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