最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Ajax的封裝詳解

 更新時間:2023年05月17日 10:31:49   作者:獨立寒秋-  
這篇文章主要介紹了關(guān)于Ajax的封裝詳解,ajax用于瀏覽器與服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP 請求),做到局部請求以實現(xiàn)局部刷新,本篇講解ajax的封裝,需要的朋友可以參考下

Ajax的封裝

一個免費的測試接口

https://api.apiopen.top/getJoke

一、最簡單的原生Ajax封裝

  • 先看下效果

在這里插入圖片描述

  • 具體代碼
<body>
    <div class="box">
        <button id="btn">來段數(shù)據(jù)</button><br>
    <textarea  id="text" ></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函數(shù)封裝

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

  • 通過promise實例化的對象可以接受一個參數(shù),參數(shù)類型為函數(shù),該函數(shù)的兩個參數(shù)是resolve和reject,
  • 在請求到數(shù)據(jù)后可以通過resolve、resolve函數(shù)來改變Promise對象的狀態(tài)
  • resolve表示成功,resolve表示失敗
  • 成功或者失敗都可以調(diào)用Promise對象的then方法
  • then接收兩個參數(shù),兩個參數(shù)都是函數(shù)類型
  • 成功的形參為value,失敗的形參為reason
  • value就是resolve方法里的返回結(jié)果
<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兩種語法結(jié)合可以讓異步代碼像同步代碼一樣
  • async函數(shù)的返回值為promise對象
  • 該promise對象的結(jié)果是由async函數(shù)執(zhí)行的返回值決定的
  • 只要返回值的類型不是一個promise類型的對象則async函數(shù)的返回結(jié)果就是一個成功的promise對象
  • 返回值的類型不是一個promise類型的對象則跟promise對象的狀態(tài)有關(guān)revolve或者reject或者拋出異常

await

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

在這里插入圖片描述

<body>
    <button>請求數(shù)據(jù)</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工具庫直接發(fā)送Ajax

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

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

post

在這里插入圖片描述

get

在這里插入圖片描述

<template>
<div>
        <button @click="post">直接發(fā)送POST</button>
        <button @click="get">直接發(fā)送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>

到此這篇關(guān)于關(guān)于Ajax的封裝詳解的文章就介紹到這了,更多相關(guān)Ajax的封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ajax跨域訪問報錯501的解決方法

    ajax跨域訪問報錯501的解決方法

    這篇文章主要為大家詳細介紹了ajax跨域訪問報錯501的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Jquery中$.ajax()方法參數(shù)詳解

    Jquery中$.ajax()方法參數(shù)詳解

    本文是小編日常整理些有關(guān)jquery ajax()參數(shù)詳解,由于jquery ajax方法參數(shù)比較多,靠大腦記住有點犯難,下面小編把內(nèi)容整理分享到腳本之家網(wǎng)站,供大家參考
    2015-10-10
  • Ajax異步請求的五個步驟及實戰(zhàn)案例

    Ajax異步請求的五個步驟及實戰(zhàn)案例

    通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,Ajax可以使網(wǎng)頁實現(xiàn)異步更新,下面這篇文章主要給大家介紹了關(guān)于Ajax異步請求的五個步驟及實戰(zhàn)案例的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • AJAX和JSP實現(xiàn)的基于WEB的文件上傳的進度控制代碼

    AJAX和JSP實現(xiàn)的基于WEB的文件上傳的進度控制代碼

    AJAX和JSP實現(xiàn)的基于WEB的文件上傳的進度控制代碼...
    2007-05-05
  • AJAX和JSP混合使用方法實例

    AJAX和JSP混合使用方法實例

    AJAX 是一種在無需重新加載整個網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。下面通過本文給大家介紹AJAX和JSP混合使用方法實例,感興趣的朋友一起學(xué)習吧
    2016-02-02
  • AJAX初體驗之上手篇

    AJAX初體驗之上手篇

    AJAX初體驗之上手篇...
    2006-07-07
  • ajax實時任務(wù)提示功能的實現(xiàn)代碼

    ajax實時任務(wù)提示功能的實現(xiàn)代碼

    本項目運用了 FLEAPHP,MYSQL,SMARTY,FCKEDItor,JSON,PROTOTYPE的技術(shù),在這里首先要感謝這些開源項目的開發(fā)者給我們帶來的好東西,其次要感謝[生氣豬--讓我?guī)退鲆粋€這樣的小東西來提醒她按時完成事情].花了一個3個小時完成.希望給大家起到拋磚引玉的作用啊....
    2008-09-09
  • Ajax?請求隊列解決方案并結(jié)合elementUi做全局加載狀態(tài)

    Ajax?請求隊列解決方案并結(jié)合elementUi做全局加載狀態(tài)

    這篇文章主要介紹了Ajax?請求隊列解決方案并結(jié)合elementUi做全局加載狀態(tài),使用 消息隊列 制作 請求防抖,防止重復(fù)請求印象服務(wù)器,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • AJAX亂碼與異步同步以及封裝jQuery庫實現(xiàn)步驟詳解

    AJAX亂碼與異步同步以及封裝jQuery庫實現(xiàn)步驟詳解

    這篇文章主要介紹了異步通信技術(shù)AJAX亂碼問題、異步與同步、手動封裝一個jQuery庫,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習吧
    2023-01-01
  • 利用AJAX實現(xiàn)無刷新數(shù)據(jù)分頁

    利用AJAX實現(xiàn)無刷新數(shù)據(jù)分頁

    這篇文章主要介紹了利用AJAX實現(xiàn)數(shù)據(jù)分頁的相關(guān)資料,如何利用AJAX無刷新直接從服務(wù)器獲取數(shù)據(jù)分頁,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論

涞源县| 罗山县| 湾仔区| 南华县| 绩溪县| 鹤山市| 靖宇县| 盐山县| 商南县| 高安市| 岳普湖县| 塔河县| 磐安县| 罗城| 新源县| 南靖县| 泾阳县| 老河口市| 嘉祥县| 河东区| 青浦区| 巩义市| 龙州县| 衡水市| 海伦市| 阜阳市| 上虞市| 淮滨县| 玛沁县| 台中市| 高碑店市| 镇原县| 衢州市| 鄂伦春自治旗| 航空| 达尔| 和田市| 兴仁县| 常山县| 尼勒克县| 车致|