国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

關于Ajax的封裝詳解

瀏覽:8日期:2022-06-14 13:44:42
目錄Ajax的封裝一、最簡單的原生Ajax封裝二、使用promise函數封裝三、promise配合async和await使用四、使用axios工具庫直接發送AjaxAjax的封裝

一個免費的測試接口

https://api.apiopen.top/getJoke

一、最簡單的原生Ajax封裝先看下效果

具體代碼<body> <div class='box'><button id='btn'>來段數據</button><br> <textarea ></textarea> </div> <script>const btn = document.getElementById('btn');const txt = document.getElementById('text');btn.onclick = function(){ getAjax('get','https://api.apiopen.top/getJoke',function(res){let narr=[];for(let i=0;i<res.length;i++){ narr.push('\n'+(i+1)+'.'+res[i].text) console.log(res[i].text); text.innerHTML=narr;} });}function getAjax(method,url,callback){ const xhr = new XMLHttpRequest(); xhr.open(method,url); xhr.send(); xhr.onreadystatechange = function(){if(xhr.readyState === 4){ if(xhr.status>=200 && xhr.status<300){const res = JSON.parse(xhr.response);callback(res.result); }} }} </script>二、使用promise函數封裝

Promise是ES6引入的異步編程的新解決方案,語法上Promise是一個構造函數,用來封裝異步操作并可以獲取其成功或者失敗的回調結果。

通過promise實例化的對象可以接受一個參數,參數類型為函數,該函數的兩個參數是resolve和reject,在請求到數據后可以通過resolve、resolve函數來改變Promise對象的狀態resolve表示成功,resolve表示失敗成功或者失敗都可以調用Promise對象的then方法then接收兩個參數,兩個參數都是函數類型成功的形參為value,失敗的形參為reasonvalue就是resolve方法里的返回結果<script> const btn = document.getElementById('btn'); btn.onclick = function(){grtAjax('get','https://api.apiopen.top/getJoke',function(res){ console.log(res);}); } function grtAjax(method,url,callback){const p = new Promise((resolve,reject)=>{ const xhr = new XMLHttpRequest(); xhr.open(method,url); xhr.send(); xhr.onreadystatechange = function(){if(xhr.readyState == 4){ if(xhr.status >= 200 && xhr.status < 300){resolve(xhr.response); }else{reject(xhr.status); }} }});p.then(function(value){ const res = JSON.parse(value); callback(res.result)},function(reason){console.error(reason);}) }</script>

三、promise配合async和await使用

async

async和await兩種語法結合可以讓異步代碼像同步代碼一樣async函數的返回值為promise對象該promise對象的結果是由async函數執行的返回值決定的只要返回值的類型不是一個promise類型的對象則async函數的返回結果就是一個成功的promise對象返回值的類型不是一個promise類型的對象則跟promise對象的狀態有關revolve或者reject或者拋出異常

await

await右側的表達式一般為promise對象,但也可以是其他的值如果是promise對象,await返回的是promise成功的值如果是其他的值,直接將此值作為await的返回值await必須寫在async函數中,但是async函數中可以沒有await如果await的promise狀態是失敗的,就會拋出異常,需要通過try…catch捕獲處理

<body> <button>請求數據</button> <script>const btn = document.querySelector('button');function sendAjax(method,url){ return new Promise((resolve,reject)=>{ const xhr = new XMLHttpRequest();xhr.responseType = 'json';xhr.open(method,url);xhr.send();xhr.onreadystatechange = function(){ if(xhr.readyState === 4){if(xhr.status >=200 && xhr.status<300){ resolve(xhr.response);}else{ reject(xhr.status);} }} })}btn.addEventListener('click',async function(){ let result = await sendAjax('get','https://api.apiopen.top/getJoke'); console.log(result);}) </script></body>四、使用axios工具庫直接發送Ajax

Axios 是一個基于 promise 網絡請求庫,作用于node.js 和瀏覽器中。 它是 isomorphic 的(即同一套代碼可以運行在瀏覽器和node.js中)。在服務端它使用原生 node.js http 模塊, 而在客戶端 (瀏覽端) 則使用 XMLHttpRequests。

這里使用了vue-cli搭建了一個vue項目并下載了 axios

post

get

<template><div><button @click='post'>直接發送POST</button><button @click='get'>直接發送GET</button> </div></template><script>export default { data(){ return{} }, methods:{ async get(){ const {data:res} = await this.$axios.get('https://api.apiopen.top/getJoke',{params:{id:1} }); console.log(res); }, post(){ this.$axios.post('https://api.apiopen.top/getJoke',{name:'yxj',gender:'男'}) .then((res)=>{console.log(res.data.result); }); } }}</script>

到此這篇關于關于Ajax的封裝詳解的文章就介紹到這了,更多相關Ajax的封裝內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Ajax
相關文章:
主站蜘蛛池模板: 欧美在线综合视频 | 91精品国产免费 | 国产精品久久久久久福利漫画 | 国产精品国产三级国产an | 拍拍拍又黄又爽无挡视频免费 | 中文精品视频一区二区在线观看 | 精品一区二区三区免费站 | 九九视频在线观看视频6偷拍 | 国产三级精品91三级在专区 | 美女被cao免费看在线看网站 | 日本欧美中文 | 午夜视频一区二区 | 国产人做人爱免费视频 | 免费一级欧美片片线观看 | 亚洲最大成人 | 欧美老妇b | 精品日韩二区三区精品视频 | 一级片aaa| 亚洲国产精品激情在线观看 | 最新亚洲人成网站在线影院 | 自拍偷自拍亚洲精品10p | 欧美亚洲另类久久综合 | 自偷自偷自亚洲永久 | 毛茸茸年轻成熟亚洲人 | 久久精品综合国产二区 | 美女网站免费观看视频 | 精品老司机在线视频香蕉 | 久久久不卡国产精品一区二区 | 亚洲视频 中文字幕 | 日韩黄色免费观看 | 亚洲免费中文 | 91亚洲免费| 亚洲精品国产福利片 | 一本大道香蕉大vr在线吗视频 | 在线观看二区三区午夜 | 亚洲国产成人91精品 | 亚洲欧美日韩久久精品第一区 | 在线观看91精品国产入口 | 国产成人精品一区二区三区 | 欧美在线1 | 欧美日韩国产va另类 |