国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ajax 筆記(四)—— Ajax 進(jìn)階

這篇具有很好參考價(jià)值的文章主要介紹了Ajax 筆記(四)—— Ajax 進(jìn)階。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


Ajax 筆記:

Ajax 筆記(一)—— Ajax 入門(mén)

Ajax 筆記(二)—— Ajax 案例

Ajax 筆記(三)—— Ajax 原理

Ajax 筆記(四)—— Ajax 進(jìn)階


Ajax 筆記接口文檔:https://apifox.com/apidoc/shared-fa9274ac-362e-4905-806b-6135df6aa90e/doc-842135


4. Ajax 進(jìn)階

4.1 同步代碼和異步代碼

JavaScript 是單線程的語(yǔ)言,意味著它只有一個(gè)主線程用來(lái)執(zhí)行代碼。這個(gè)特點(diǎn)決定了 JavaScript 在同一時(shí)間只能處理一個(gè)任務(wù),防止了多線程帶來(lái)的競(jìng)態(tài)條件和死鎖等問(wèn)題。隨著 HTML5 到來(lái)也支持了多線程webWorker,但也是不允許操作 DOM 。

  1. 同步代碼:逐行執(zhí)行,需原地等待結(jié)果后,才繼續(xù)向下執(zhí)行

  2. 異步代碼:調(diào)用后耗時(shí),不阻塞代碼繼續(xù)執(zhí)行(不必原地等待),在將來(lái)完成后觸發(fā)回調(diào)函數(shù)傳遞結(jié)果,比如:setTimeout / setInterval,事件,Ajax

4.2 回調(diào)函數(shù)地獄

  1. 概念:在回調(diào)函數(shù)中嵌套回調(diào)函數(shù),一直嵌套下去就形成了回調(diào)函數(shù)地獄
  2. 缺點(diǎn):可讀性差,異常無(wú)法捕獲,耦合性嚴(yán)重

代碼示例:

// 需求:展示默認(rèn)第一個(gè)省,第一個(gè)城市,第一個(gè)地區(qū)在下拉菜單中
axios({ url: 'http://hmajax.itheima.net/api/province' }).then(result => {
  const pname = result.data.list[0]
  document.querySelector('.province').innerHTML = pname
  // 獲取第一個(gè)省份默認(rèn)下屬的第一個(gè)城市名字
  axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname } }).then(result => {
    const cname = result.data.list[0]
    document.querySelector('.city').innerHTML = cname
    // 獲取第一個(gè)城市默認(rèn)下屬第一個(gè)地區(qū)名字
    axios({ url: 'http://hmajax.itheima.net/api/area', params: { pname, cname } }).then(result => {
      document.querySelector('.area').innerHTML = result.data.list[0]
    })
  })
})

4.2.1 解決方法一:Promise 鏈?zhǔn)秸{(diào)用

  1. 依靠 then() 方法會(huì)返回一個(gè)新生成的 Promise 對(duì)象特性,繼串聯(lián)下一環(huán)任務(wù),直到結(jié)束。then() 回調(diào)函數(shù)中的返回值,會(huì)影響新生成的 Promise 對(duì)象最終狀態(tài)和結(jié)果。

代碼示例:

/**
 * 目標(biāo):掌握Promise的鏈?zhǔn)秸{(diào)用
 * 需求:把省市的嵌套結(jié)構(gòu),改成鏈?zhǔn)秸{(diào)用的線性結(jié)構(gòu)
*/
// 1. 創(chuàng)建Promise對(duì)象-模擬請(qǐng)求省份名字
const p = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('北京市')
  }, 2000)
})

// 2. 獲取省份名字
const p2 = p.then(result => {
  console.log(result)
  // 3. 創(chuàng)建Promise對(duì)象-模擬請(qǐng)求城市名字
  // return Promise對(duì)象最終狀態(tài)和結(jié)果,影響到新的Promise對(duì)象
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(result + '--- 北京')
    }, 2000)
  })
})

// 4. 獲取城市名字
p2.then(result => {
  console.log(result)
})

// then()原地的結(jié)果是一個(gè)新的Promise對(duì)象
console.log(p2 === p)
  1. 利用 Promise 鏈?zhǔn)秸{(diào)用解決回調(diào)地獄
/**
 * 目標(biāo):把回調(diào)函數(shù)嵌套代碼,改成Promise鏈?zhǔn)秸{(diào)用結(jié)構(gòu)
 * 需求:獲取默認(rèn)第一個(gè)省,第一個(gè)市,第一個(gè)地區(qū)并展示在下拉菜單中
*/
let pname = ''
// 1. 得到-獲取省份Promise對(duì)象
axios({url: 'http://hmajax.itheima.net/api/province'}).then(result => {
  pname = result.data.list[0]
  document.querySelector('.province').innerHTML = pname
  // 2. 得到-獲取城市Promise對(duì)象
  return axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
}).then(result => {
  const cname = result.data.list[0]
  document.querySelector('.city').innerHTML = cname
  // 3. 得到-獲取地區(qū)Promise對(duì)象
  return axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
}).then(result => {
  console.log(result)
  const areaName = result.data.list[0]
  document.querySelector('.area').innerHTML = areaName
})

4.2.2 解決方法二:async 函數(shù)和 await

在 async 函數(shù)內(nèi),使用 await 關(guān)鍵字取代 then 函數(shù),等待獲取 Promise 對(duì)象成功狀態(tài)的結(jié)果值

  1. 利用async 函數(shù)和 await 解決回調(diào)地獄
/**
 * 目標(biāo):掌握async和await語(yǔ)法,解決回調(diào)函數(shù)地獄
 * 概念:在async函數(shù)內(nèi),使用await關(guān)鍵字,獲取Promise對(duì)象"成功狀態(tài)"結(jié)果值
 * 注意:await必須用在async修飾的函數(shù)內(nèi)(await會(huì)阻止"異步函數(shù)內(nèi)"代碼繼續(xù)執(zhí)行,原地等待結(jié)果)
*/
// 1. 定義async修飾函數(shù)
async function getData() {
  // 2. await等待Promise對(duì)象成功的結(jié)果
  const pObj = await axios({url: 'http://hmajax.itheima.net/api/province'})
  const pname = pObj.data.list[0]
  const cObj = await axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
  const cname = cObj.data.list[0]
  const aObj = await axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
  const areaName = aObj.data.list[0]


  document.querySelector('.province').innerHTML = pname
  document.querySelector('.city').innerHTML = cname
  document.querySelector('.area').innerHTML = areaName
}

getData()
  1. async 函數(shù)和 await 捕獲錯(cuò)誤
try {
  // 要執(zhí)行的代碼
} catch (error) {
  // error 接收的是,錯(cuò)誤消息
  // try 里代碼,如果有錯(cuò)誤,直接進(jìn)入這里執(zhí)行
}

改進(jìn)上述代碼:

/**
 * 目標(biāo):async和await_錯(cuò)誤捕獲
*/
async function getData() {
  // 1. try包裹可能產(chǎn)生錯(cuò)誤的代碼
  try {
    const pObj = await axios({ url: 'http://hmajax.itheima.net/api/province' })
    const pname = pObj.data.list[0]
    const cObj = await axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname } })
    const cname = cObj.data.list[0]
    const aObj = await axios({ url: 'http://hmajax.itheima.net/api/area', params: { pname, cname } })
    const areaName = aObj.data.list[0]

    document.querySelector('.province').innerHTML = pname
    document.querySelector('.city').innerHTML = cname
    document.querySelector('.area').innerHTML = areaName
  } catch (error) {
    // 2. 接著調(diào)用catch塊,接收錯(cuò)誤信息
    // 如果try里某行代碼報(bào)錯(cuò)后,try中剩余的代碼不會(huì)執(zhí)行了
    console.dir(error)
  }
}

getData()

4.3 Promise.all 靜態(tài)方法

合并多個(gè) Promise 對(duì)象并等待所有同時(shí)成功的結(jié)果,如果有一個(gè)報(bào)錯(cuò)就會(huì)最終為失敗狀態(tài),當(dāng)需要同時(shí)渲染多個(gè)接口數(shù)據(jù)同時(shí)到網(wǎng)頁(yè)上時(shí)使用

const p = Promise.all([Promise對(duì)象, Promise對(duì)象, ...])
p.then(result => {
  // result 結(jié)果: [Promise對(duì)象成功結(jié)果, Promise對(duì)象成功結(jié)果, ...]
}).catch(error => {
  // 第一個(gè)失敗的 Promise 對(duì)象,拋出的異常對(duì)象
})

實(shí)例代碼:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Promise的all方法</title>
</head>

<body>
  <ul class="my-ul"></ul>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目標(biāo):掌握Promise的all方法作用,和使用場(chǎng)景
     * 業(yè)務(wù):當(dāng)我需要同一時(shí)間顯示多個(gè)請(qǐng)求的結(jié)果時(shí),就要把多請(qǐng)求合并
     * 例如:默認(rèn)顯示"北京", "上海", "廣州", "深圳"的天氣在首頁(yè)查看
     * code:
     * 北京-110100
     * 上海-310100
     * 廣州-440100
     * 深圳-440300
    */
    // 1. 請(qǐng)求城市天氣,得到Promise對(duì)象
    const bjPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '110100' } })
    const shPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '310100' } })
    const gzPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440100' } })
    const szPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440300' } })

    // 2. 使用Promise.all,合并多個(gè)Promise對(duì)象
    const p = Promise.all([bjPromise, shPromise, gzPromise, szPromise])
    p.then(result => {
      // 注意:結(jié)果數(shù)組順序和合并時(shí)順序是一致
      console.log(result)
      const htmlStr = result.map(item => {
        return `<li>${item.data.data.area} --- ${item.data.data.weather}</li>`
      }).join('')
      document.querySelector('.my-ul').innerHTML = htmlStr
    }).catch(error => {
      console.dir(error)
    })
  </script>
</body>

</html>

4.4 事件循環(huán)

4.4.1 事件循環(huán)

  1. 作用:事件循環(huán)負(fù)責(zé)執(zhí)行代碼,收集和處理事件以及執(zhí)行隊(duì)列中的子任務(wù)
  2. 原因:JavaScript 單線程(某一刻只能執(zhí)行一行代碼),為了讓耗時(shí)代碼不阻塞其他代碼運(yùn)行,設(shè)計(jì)了事件循環(huán)模型
  3. 概念:執(zhí)行代碼和收集異步任務(wù)的模型,在調(diào)用??臻e,循環(huán)不斷地調(diào)用任務(wù)隊(duì)列里回調(diào)函數(shù)的執(zhí)行機(jī)制,就叫事件循環(huán)

舉例說(shuō)明:

/**
 * 目標(biāo):閱讀并回答執(zhí)行的順序結(jié)果
*/
console.log(1)
setTimeout(() => {
  console.log(2)
}, 0)
function myFn() {
  console.log(3)
}
function ajaxFn() {
  const xhr = new XMLHttpRequest()
  xhr.open('GET', 'http://hmajax.itheima.net/api/province')
  xhr.addEventListener('loadend', () => {
    console.log(4)
  })
  xhr.send()
}
for (let i = 0; i < 1; i++) {
  console.log(5)
}
ajaxFn()
document.addEventListener('click', () => {
  console.log(6)
})
myFn()

// 結(jié)果:1 5 3 2 4 點(diǎn)擊一次document就會(huì)執(zhí)行一次打印6

Ajax 筆記(四)—— Ajax 進(jìn)階,Ajax,ajax,筆記,okhttp
代碼分析:

  1. console.log(1)進(jìn)入調(diào)用棧,然后在控制臺(tái)打印1
  2. setTimeout是異步代碼,交給瀏覽器,console.log(2) 在 0 s 過(guò)后進(jìn)入任務(wù)隊(duì)列
  3. 然后兩個(gè) function 不調(diào)用,不執(zhí)行
  4. for循環(huán)放入調(diào)用棧執(zhí)行,打印5
  5. 執(zhí)行ajaxFn,loadend事件異步,交給瀏覽器
  6. 用戶(hù)click異步點(diǎn)擊事件,交給瀏覽器,和loadend一樣處于監(jiān)測(cè)狀態(tài)
  7. myFn放入調(diào)用棧執(zhí)行,打印3
  8. 同步代碼執(zhí)行完畢,調(diào)用棧清空,然后反復(fù)查找任務(wù)隊(duì)列有無(wú)需要執(zhí)行的回調(diào)函數(shù)
  9. 執(zhí)行setTimeout,進(jìn)入調(diào)用棧,打印2,出棧
  10. 瀏覽器中的loadend事件被放入任務(wù)隊(duì)列,然后放入調(diào)用棧,執(zhí)行,打印4
  11. 最后click事件,點(diǎn)擊后打印6

4.4.2 宏任務(wù)與微任務(wù)

  1. 異步任務(wù)劃分:
  • 宏任務(wù):由瀏覽器環(huán)境執(zhí)行的異步代碼
  • 微任務(wù):由 JS 引擎環(huán)境執(zhí)行的異步代碼

宏任務(wù)(Macrotasks)

  1. setTimeoutsetInterval:用于創(chuàng)建定時(shí)任務(wù),會(huì)在指定的時(shí)間間隔之后執(zhí)行回調(diào)函數(shù)。
  2. DOM 事件:如點(diǎn)擊事件、輸入事件等。
  3. 網(wǎng)絡(luò)請(qǐng)求:如 Ajax 請(qǐng)求、fetch 等。
  4. I/O 操作:如文件讀寫(xiě)、讀取數(shù)據(jù)庫(kù)等。
  5. requestAnimationFrame:用于在每次瀏覽器重繪之前執(zhí)行的回調(diào)。
  6. MessageChannel:一種更底層的異步任務(wù)創(chuàng)建方式。
  7. UI 渲染:瀏覽器會(huì)在宏任務(wù)執(zhí)行完成后進(jìn)行 UI 渲染。

微任務(wù)(Microtasks)

  1. Promise 的 resolve 和 reject:當(dāng)一個(gè) Promise 被 resolved 或 rejected 時(shí),相關(guān)的回調(diào)會(huì)被放入微任務(wù)隊(duì)列。
  2. process.nextTick(Node.js 環(huán)境下):類(lèi)似于 Promise 的微任務(wù),但在 Node.js 環(huán)境中使用。
  3. Object.observeMutationObserver:用于監(jiān)聽(tīng)對(duì)象的變化,在變化后會(huì)觸發(fā)回調(diào)。
  4. Vue 的 nextTick:Vue 中用于延遲執(zhí)行 DOM 更新之后的回調(diào)。
  5. await 表達(dá)式的后續(xù)操作:在 async 函數(shù)中,await 表達(dá)式后的操作會(huì)被放入微任務(wù)隊(duì)列。

Ajax 筆記(四)—— Ajax 進(jìn)階,Ajax,ajax,筆記,okhttp
JavaScript 執(zhí)行順序如下:

  1. 執(zhí)行同步代碼:從上到下逐行執(zhí)行當(dāng)前代碼文件中的同步代碼,將函數(shù)調(diào)用壓入執(zhí)行棧,遇到異步任務(wù)會(huì)將其注冊(cè),但不會(huì)立即執(zhí)行。

  2. 執(zhí)行微任務(wù):在每次事件循環(huán)中,首先會(huì)執(zhí)行微任務(wù)隊(duì)列中的所有微任務(wù),直到微任務(wù)隊(duì)列為空。這保證了微任務(wù)比宏任務(wù)更早執(zhí)行。

  3. 執(zhí)行宏任務(wù):然后從宏任務(wù)隊(duì)列中取出一個(gè)宏任務(wù)(通常是先進(jìn)先出),執(zhí)行它,可能觸發(fā)異步操作。

  4. 可能進(jìn)行 UI 渲染:在宏任務(wù)執(zhí)行完成后,瀏覽器有機(jī)會(huì)進(jìn)行 UI 渲染(如果有需要的話)。

  5. 重復(fù)以上步驟:然后事件循環(huán)繼續(xù),重復(fù)執(zhí)行微任務(wù)、宏任務(wù)、可能的 UI 渲染等步驟。

實(shí)例代碼:

/**
 * 目標(biāo):閱讀并回答打印的執(zhí)行順序
*/
console.log(1)
setTimeout(() => {
  console.log(2)
}, 0)
const p = new Promise((resolve, reject) => {
  resolve(3)
})
p.then(res => {
  console.log(res)
})
console.log(4)

// 1 3 5 4 2

代碼分析:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-641660.html

  1. console.log(1)進(jìn)入調(diào)用棧,打印1
  2. setTiemout宏任務(wù),交給瀏覽器,0sconsole.log(2)放入宏任務(wù)隊(duì)列排隊(duì)
  3. new Promise放入調(diào)用棧,執(zhí)行console.log(3),打印3,用4標(biāo)記成功,然后出棧
  4. p調(diào)用過(guò)resolve,處于成功狀態(tài),p.then()里面的回調(diào)函數(shù)是微任務(wù),放入微任務(wù)隊(duì)列排隊(duì)
  5. console.log(5),進(jìn)入調(diào)用棧打印5,出棧
  6. 調(diào)用棧清空,先調(diào)度微任務(wù)隊(duì)列的回調(diào)函數(shù)
  7. 執(zhí)行微任務(wù)console.log(result),打印4
  8. 接著調(diào)度宏任務(wù)console.log(2),打印2

4.5 案例

4.5.1 案例一-商品分類(lèi)

/**
 * 目標(biāo):把所有商品分類(lèi)“同時(shí)”渲染到頁(yè)面上
 *  1. 獲取所有一級(jí)分類(lèi)數(shù)據(jù)
 *  2. 遍歷id,創(chuàng)建獲取二級(jí)分類(lèi)請(qǐng)求
 *  3. 合并所有二級(jí)分類(lèi)Promise對(duì)象
 *  4. 等待同時(shí)成功后,渲染頁(yè)面
*/
// 1. 獲取所有一級(jí)分類(lèi)數(shù)據(jù)
axios({
  url: 'http://hmajax.itheima.net/api/category/top'
}).then(result => {
  console.log(result)
  // 2. 遍歷id,創(chuàng)建獲取二級(jí)分類(lèi)請(qǐng)求
  const secPromiseList = result.data.data.map(item => {
    return axios({
      url: 'http://hmajax.itheima.net/api/category/sub',
      params: {
        id: item.id // 一級(jí)分類(lèi)id
      }
    })
  })
  console.log(secPromiseList) // [二級(jí)分類(lèi)請(qǐng)求Promise對(duì)象,二級(jí)分類(lèi)請(qǐng)求Promise對(duì)象,...]
  // 3. 合并所有二級(jí)分類(lèi)Promise對(duì)象
  const p = Promise.all(secPromiseList)
  p.then(result => {
    console.log(result)
    // 4. 等待同時(shí)成功后,渲染頁(yè)面
    const htmlStr = result.map(item => {
      const dataObj = item.data.data // 取出關(guān)鍵數(shù)據(jù)對(duì)象
      return `<div class="item">
    <h3>${dataObj.name}</h3>
    <ul>
      ${dataObj.children.map(item => {
        return `<li>
        <a href="javascript:;">
          <img src="${item.picture}">
          <p>${item.name}</p>
        </a>
      </li>`
      }).join('')}
    </ul>
  </div>`
    }).join('')
    console.log(htmlStr)
    document.querySelector('.sub-list').innerHTML = htmlStr
  })
})

4.5.2 案例二-學(xué)習(xí)反饋

/**
 * 目標(biāo)1:完成省市區(qū)下拉列表切換
 *  1.1 設(shè)置省份下拉菜單數(shù)據(jù)
 *  1.2 切換省份,設(shè)置城市下拉菜單數(shù)據(jù),清空地區(qū)下拉菜單
 *  1.3 切換城市,設(shè)置地區(qū)下拉菜單數(shù)據(jù)
 */
// 1.1 設(shè)置省份下拉菜單數(shù)據(jù)
axios({
  url: 'http://hmajax.itheima.net/api/province'
}).then(result => {
  const optionStr = result.data.list.map(pname => `<option value="${pname}">${pname}</option>`).join('')
  document.querySelector('.province').innerHTML = `<option value="">省份</option>` + optionStr
})

// 1.2 切換省份,設(shè)置城市下拉菜單數(shù)據(jù),清空地區(qū)下拉菜單
document.querySelector('.province').addEventListener('change', async e => {
  // 獲取用戶(hù)選擇省份名字
  // console.log(e.target.value)
  const result = await axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname: e.target.value } })
  const optionStr = result.data.list.map(cname => `<option value="${cname}">${cname}</option>`).join('')
  // 把默認(rèn)城市選項(xiàng)+下屬城市數(shù)據(jù)插入select中
  document.querySelector('.city').innerHTML = `<option value="">城市</option>` + optionStr

  // 清空地區(qū)數(shù)據(jù)
  document.querySelector('.area').innerHTML = `<option value="">地區(qū)</option>`
})

// 1.3 切換城市,設(shè)置地區(qū)下拉菜單數(shù)據(jù)
document.querySelector('.city').addEventListener('change', async e => {
  console.log(e.target.value)
  const result = await axios({url: 'http://hmajax.itheima.net/api/area', params: {
    pname: document.querySelector('.province').value,
    cname: e.target.value
  }})
  console.log(result)
  const optionStr = result.data.list.map(aname => `<option value="${aname}">${aname}</option>`).join('')
  console.log(optionStr)
  document.querySelector('.area').innerHTML = `<option value="">地區(qū)</option>` + optionStr
})

/**
 * 目標(biāo)2:收集數(shù)據(jù)提交保存
 *  2.1 監(jiān)聽(tīng)提交的點(diǎn)擊事件
 *  2.2 依靠插件收集表單數(shù)據(jù)
 *  2.3 基于axios提交保存,顯示結(jié)果
 */
// 2.1 監(jiān)聽(tīng)提交的點(diǎn)擊事件
document.querySelector('.submit').addEventListener('click', async () => {
  // 2.2 依靠插件收集表單數(shù)據(jù)
  const form = document.querySelector('.info-form')
  const data = serialize(form, { hash: true, empty: true })
  console.log(data)
  // 2.3 基于axios提交保存,顯示結(jié)果
  try {
    const result = await axios({
      url: 'http://hmajax.itheima.net/api/feedback',
      method: 'POST',
      data
    })
    console.log(result)
    alert(result.data.message)
  } catch (error) {
    console.dir(error)
    alert(error.response.data.message)
  }
})

到了這里,關(guān)于Ajax 筆記(四)—— Ajax 進(jìn)階的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Ajax】筆記-使用fetch函數(shù)發(fā)送AJAX請(qǐng)求

    【Ajax】筆記-使用fetch函數(shù)發(fā)送AJAX請(qǐng)求

    fetch()是XMLHttpRequest的升級(jí)版,用于在JavaScript腳本里面發(fā)出 HTTP請(qǐng)求,本文章向大家介紹fetch()的用法,主要包括fetch()的用法使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下。 Fetch() 是 window.fetch 的 JavaScript polyfill。 全局 fetc

    2024年02月15日
    瀏覽(29)
  • 【Ajax】筆記-Axios與函數(shù)發(fā)送AJAX請(qǐng)求

    【Ajax】筆記-Axios與函數(shù)發(fā)送AJAX請(qǐng)求

    1、Axios是一個(gè)基于Promise的HTTP庫(kù),而Ajax是對(duì)原生XHR的封裝; 2、Ajax技術(shù)實(shí)現(xiàn)了局部數(shù)據(jù)的刷新,而Axios實(shí)現(xiàn)了對(duì)ajax的封裝。 ajax: 本身是針對(duì)MVC的編程,不符合現(xiàn)在前端MVVM的浪潮 基于原生的XHR開(kāi)發(fā),XHR本身的架構(gòu)不清晰,已經(jīng)有了fetch的替代方案 JQuery整個(gè)項(xiàng)目太大,單純使用

    2024年02月16日
    瀏覽(20)
  • AJAX學(xué)習(xí)筆記6 JQuery對(duì)AJAX進(jìn)行封裝

    AJAX學(xué)習(xí)筆記6 JQuery對(duì)AJAX進(jìn)行封裝

    AJAX學(xué)習(xí)筆記5同步與異步理解_biubiubiu0706的博客-CSDN博客 AJAX請(qǐng)求相關(guān)的代碼都是類(lèi)似的,有很多重復(fù)的代碼,這些重復(fù)的代碼能不能不寫(xiě),能不能封裝一個(gè)工具類(lèi)。要發(fā)送ajax請(qǐng)求的話,就直接調(diào)用這個(gè)工具類(lèi)中的相關(guān)函數(shù)即可。? 用JS發(fā)送AJAX請(qǐng)求回顧 響應(yīng)結(jié)果一般是個(gè)字符串

    2024年02月09日
    瀏覽(22)
  • 【Ajax】筆記-Ajax案例準(zhǔn)備與請(qǐng)求基本操作

    【Ajax】筆記-Ajax案例準(zhǔn)備與請(qǐng)求基本操作

    按鈕+div 服務(wù)端簡(jiǎn)單修改:路由規(guī)則:/server 結(jié)尾的請(qǐng)求。 點(diǎn)擊按鈕請(qǐng)求服務(wù)器把響應(yīng)體返回到div中。 修改HTML node server.js 請(qǐng)求參數(shù)

    2024年02月15日
    瀏覽(25)
  • Java課題筆記~ Ajax

    Java課題筆記~ Ajax

    1.1 概述 AJAX (Asynchronous JavaScript And XML):異步的 JavaScript 和 XML。 我們先來(lái)說(shuō)概念中的 JavaScript 和 XML , JavaScript 表明該技術(shù)和前端相關(guān); XML 是指以此進(jìn)行數(shù)據(jù)交換。 1.1.1 作用 AJAX 作用有以下兩方面: 與服務(wù)器進(jìn)行數(shù)據(jù)交換 :通過(guò)AJAX可以給服務(wù)器發(fā)送請(qǐng)求,服務(wù)器將數(shù)據(jù)直

    2024年02月12日
    瀏覽(25)
  • Ajax學(xué)習(xí)筆記第二天

    Ajax學(xué)習(xí)筆記第二天

    喜歡的東西太貴了,我一咬牙,狠下心決定不喜歡了! 【 一.GET請(qǐng)求 】 【 1.1 URL即信息 】 我們知道php的相關(guān)運(yùn)算都是在服務(wù)器端進(jìn)行的,此時(shí)我們要考慮一個(gè)問(wèn)題,如何將要計(jì)算的數(shù)字帶給服務(wù)器?我們可以通過(guò)URL傳遞數(shù)據(jù): ?xingming=ikunGGnianling=20xingbie=男 一個(gè)標(biāo)準(zhǔn)的URL網(wǎng)址

    2024年02月07日
    瀏覽(19)
  • Ajax 筆記

    9.1 Ajax 概述 什么是 Ajax AJAX = 異步 JavaScript 和 XML(Asynchronous JavaScript and XML)。 簡(jiǎn)短地說(shuō),在不重載整個(gè)網(wǎng)頁(yè)的情況下,AJAX 通過(guò)后臺(tái)加載數(shù)據(jù),并在網(wǎng)頁(yè)上進(jìn)行顯示。 9.2 Ajax 方法 9.2.1 load() 方法 ? jQuery load() 方法是簡(jiǎn)單但強(qiáng)大的 AJAX 方法。 ? load() 方法從服務(wù)器加載數(shù)據(jù),

    2024年02月17日
    瀏覽(13)
  • AJAX學(xué)習(xí)筆記3練習(xí)

    AJAX學(xué)習(xí)筆記3練習(xí)

    AJAX學(xué)習(xí)筆記2發(fā)送Post請(qǐng)求_biubiubiu0706的博客-CSDN博客 1.驗(yàn)證用戶(hù)名是否可用 需求,用戶(hù)輸入用戶(hù)名,失去焦點(diǎn)--onblur失去焦點(diǎn)事件,發(fā)送AJAX POST請(qǐng)求,驗(yàn)證用戶(hù)名是否可用 新建表 前端頁(yè)面 WEB-INF下新建lib包引入依賴(lài),要用JDBC 后端代碼 還可以在input獲得焦點(diǎn)時(shí)候?qū)pan里面的數(shù)據(jù)清空

    2024年02月09日
    瀏覽(18)
  • Ajax 筆記(二)

    Ajax 筆記(二)

    Ajax 筆記: Ajax 筆記(一)—— Ajax 入門(mén) Ajax 筆記(二)—— Ajax 案例 Ajax 筆記(三)—— Ajax 原理 Ajax 筆記(四)—— Ajax 進(jìn)階 Ajax 筆記接口文檔: https://apifox.com/apidoc/shared-fa9274ac-362e-4905-806b-6135df6aa90e/doc-842135 2.1.1 渲染列表 獲取數(shù)據(jù)的時(shí)候,需要給自己起一個(gè)外號(hào)。由于都

    2024年02月14日
    瀏覽(13)
  • 【Ajax】筆記-同源策略

    【Ajax】筆記-同源策略

    同源(即url相同):協(xié)議、域名、端口號(hào) 必須完全相同。(請(qǐng)求是來(lái)自同一個(gè)服務(wù)) 跨域:違背了同源策略,即跨域。 ajax請(qǐng)求是遵循同源策略的。 同源請(qǐng)求例子(在瀏覽器訪問(wèn)127.0.0.1:9000/server-orign,然后點(diǎn)擊按鈕發(fā)送同源請(qǐng)求): 服務(wù)端對(duì)同源請(qǐng)求處理: 客戶(hù)端html: 同源

    2024年02月15日
    瀏覽(15)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包