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

Vue3使用axios實(shí)現(xiàn)Ajax請求過程

 更新時(shí)間:2026年05月28日 09:53:06   作者:吳聲子夜歌  
這段文章詳細(xì)介紹了axios在Vue.js項(xiàng)目中的應(yīng)用,包括如何引入axios、發(fā)送GET和POST請求、處理響應(yīng)數(shù)據(jù)等,通過實(shí)際示例展示了如何使用axios進(jìn)行Ajax請求,適用于Vue.js開發(fā)者進(jìn)行數(shù)據(jù)交互

1、什么是axios

在實(shí)際開發(fā)過程中,瀏覽器通常需要和服務(wù)器端進(jìn)行數(shù)據(jù)交互。而Vue.js并未提供與服務(wù)器端通信的接口。

從Vue.js 2.0版本之后,官方推薦使用axios來實(shí)現(xiàn)Ajax請求。

axios是一個(gè)基于promise的HTTP客戶端,它的主要特點(diǎn)如下:

  • 從瀏覽器中創(chuàng)建XMLHttpRequest。
  • 從node.js發(fā)出HTTP請求。
  • 支持Promise API。
  • 攔截請求和響應(yīng)。
  • 轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)。
  • 取消請求。
  • 自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)。
  • 客戶端支持防止CSRF/XSRF。

2、引入axios

在使用axios之前需要在頁面中進(jìn)行引入,可以使用CDN方式引入axios。

代碼如下:

 <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

如果在項(xiàng)目中使用axios,則可以使用npm方式進(jìn)行安裝。

在命令提示符窗口中輸入如下命令:

 npm install axios --save

或者使用yarn安裝,命令如下:

 yarn add axios –save

3、發(fā)送get請求

get請求主要從服務(wù)器上獲取數(shù)據(jù),傳遞的數(shù)據(jù)量比較小。使用axios發(fā)送get請求主要有兩種格式:

  • 第一種是使用axios()方法,格式如下:
 axios(options)

options參數(shù)用于設(shè)置發(fā)送請求的配置選項(xiàng)。示例代碼如下:

 axios({
     method: 'get',                 //請求方式
      url:'/book',                   //請求的URL
      params:{type:'Vue',number:10}  //傳遞的參數(shù)
 })
  • 第二種是使用axios的get()方法,格式如下:
axios.get(url[,options])
  • url:請求的服務(wù)器URL。
  • options:發(fā)送請求的配置選項(xiàng)。

示例代碼如下:

 axios.get('/book',{
   params:{            //傳遞的參數(shù)
           type : 'Vue',
           number : 10
     }
 })

使用axios發(fā)送get請求時(shí),如果有要發(fā)送的數(shù)據(jù),可以在配置選項(xiàng)中使用params字段指定要發(fā)送的數(shù)據(jù)。另外,還可以采用查詢字符串的形式將數(shù)據(jù)附加在URL后面。

例如,上述代碼可以修改為:

axios.get('/book?type=Vue&number=10')

使用axios無論發(fā)送get請求還是post請求,在發(fā)送請求后都需要使用回調(diào)函數(shù)對請求的結(jié)果進(jìn)行處理。

如果請求成功,需要使用.then方法處理請求的結(jié)果;如果請求失敗,需要使用.catch方法處理請求的結(jié)果。

示例代碼如下:

axios.get('/book',{
	params: {
		type: 'Vue',
		number: 10
	}
}).then((response)=>{
	console.log(response.data);
}).catch((error)=>{
	console.log(error);
})

這兩個(gè)回調(diào)函數(shù)都有各自獨(dú)立的作用域,如果在函數(shù)內(nèi)部訪問Vue實(shí)例,則不能直接使用this關(guān)鍵字。為了解決這個(gè)問題,需要在回調(diào)函數(shù)的后面添加.bind(this)。

示例:讀取JSON

使用axios發(fā)送get請求,讀取JSON文件中的數(shù)據(jù),并輸出讀取結(jié)果。

關(guān)鍵代碼如下:

<div id="app">
    <button @click="reqJson">獲取JSON數(shù)據(jù)</button>
    <!-- 通過<div>標(biāo)簽輸出請求內(nèi)容-->
    <div>{{message}}</div>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/vue-router@next"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript">
    const vm = Vue.createApp({
        data() {
            return {
                message: ''
            }
        },
        methods: {
            reqJson: function() {
                axios({
                    method: 'get',
                    url: 'http://127.0.0.1:3000/api/user'
                }).then((result) => {
                   this.message = result.data;
                }).catch((err) => {
                    console.log(err);
                });
            }
        }
    });
    vm.mount('#app');
</script>

服務(wù)端:

const express = require('express');
const app = express();
//處理前端跨域
const cors = require('cors');
app.use(cors({
  origin: 'http://127.0.0.1:5500'
}));

// 返回 JSON 接口
app.get('/api/user', (req, res) => {
    res.json({
        code: 0,
        msg: 'success',
        data: {
            id: 1,
            name: '李四',
            role: 'admin'
        }
    });
});

app.listen(3000, () => {
    console.log('Express 服務(wù)已啟動(dòng):http://localhost:3000/api/user');
});

運(yùn)行上述代碼,單擊“獲取JSON數(shù)據(jù)”按鈕讀取JSON數(shù)據(jù),結(jié)果如圖所示。

4、發(fā)送post請求

post請求主要是向服務(wù)器傳遞數(shù)據(jù),傳遞的數(shù)據(jù)量比較大。使用axios發(fā)送post請求同樣有兩種格式:

第一種是使用axios()方法,格式如下:

axios(options)

options參數(shù)用于設(shè)置發(fā)送請求的配置選項(xiàng)。

示例代碼如下:

axios({
	method: 'post',
	url: '/book',
	data: {
		type: 'Vue',
		number: 10
	}
})
  • url:請求的服務(wù)器URL。
  • data:發(fā)送的數(shù)據(jù)。
  • options:發(fā)送請求的配置選項(xiàng)。
axios.post('book.php', {
	type:'Vue',
	number:10
})

使用axios發(fā)送post請求來傳遞數(shù)據(jù)時(shí),數(shù)據(jù)傳遞的方式有很多種。

  • 可以將傳遞的數(shù)據(jù)寫成對象的形式,如“{type:‘Vue’,number:10}”?。
  • 還可以將傳遞的數(shù)據(jù)寫成字符串的形式,如“type=Vue&number=10”?。

示例:驗(yàn)證用戶登錄。

在用戶登錄表單中,使用axios檢測用戶登錄是否成功。實(shí)現(xiàn)步驟如下。

1.定義

元素,并設(shè)置其id屬性值為app,在該元素中定義用戶登錄表單,應(yīng)用v-model指令對用戶名文本框和密碼框進(jìn)行數(shù)據(jù)綁定,當(dāng)單擊“登錄”按鈕時(shí)調(diào)用login()方法,代碼如下:

<div id="app">
    <div class="title">用戶登錄</div>
    <form ref="myform">
        <div class="one">
            <div class="one">
                <label for="username">用戶名:</label>
                <input id="uesrname" type="text" v-model="username" ref="uname">
            </div>
            <div class="one">
                <label for="pwd">密碼:</label>
                <input id="pwd" type="password" v-model="pwd" ref="upwd">
            </div>
            <div class="two">
                <input type="button" value="登錄" @click="login">
                <input type="reset" value="重置">
            </div>
        </div>
    </form>
</div>

2.編寫CSS代碼,為頁面元素設(shè)置樣式,代碼如下:

<style>
    body{
        font-family: 微軟雅黑;
        font-size: 14px;
    }
    .title{
        font-size: 18px;
        line-height: 50px;
        margin-left: 130px;
    }
    .one{
        margin: 10px 0;
    }
    .one label{
        width: 100px;
        float: left;
        text-align: right;
        height: 20px;
        line-height: 20px;
    }
    .two{
        padding: 120px;
    }
</style>

3.創(chuàng)建根組件實(shí)例,在實(shí)例中定義數(shù)據(jù)和方法,在定義的login方法中,首先判斷用戶輸入的用戶名和密碼是否為空,如果不為空就使用axios發(fā)送post請求,根據(jù)服務(wù)器返回的響應(yīng)判斷登錄是否成功。

代碼如下:

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/vue-router@next"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript">
    const vm = Vue.createApp({
        data() {
            return {
                username: '',
                pwd: ''
            }
        },
        methods: {
            login: function() {
                if(this.username === '') {
                    alert('請輸入用戶名');
                    this.$refs.uname.focus();
                } else if(this.pwd === '') {
                    alert('請輸入密碼');
                    this.$refs.upwd.focus();
                } else {
                    console.log(this.username + ':' + this.pwd);
                    axios.post('http://127.0.0.1:3000/api/login', {
                        username: this.username,
                        pwd: this.pwd
                    }).then((result) => {
                      console.log(result);
                      alert('登錄成功!')
                    }).catch((err) => {
                       console.log(err);
                    });
                }
            }
        }
    });
    vm.mount('#app');
</script>

后端:

const express = require('express');
const app = express();

//處理前端跨域
const cors = require('cors');
app.use(cors({
  origin: 'http://127.0.0.1:5500'
}));

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 返回 JSON 接口
app.get('/api/user', (req, res) => {
    res.json({
        code: 0,
        msg: 'success',
        data: {
            id: 1,
            name: '李四',
            role: 'admin'
        }
    });
});

//登錄接口
app.post('/api/login', (req, res) => {
    console.log(req.body);
    res.json({ msg: 'ok' });
});

app.listen(3000, () => {
    console.log('Express 服務(wù)已啟動(dòng):http://localhost:3000/api/user');
});

運(yùn)行上述代碼,在表單中輸入正確的用戶名“jerry”和密碼“123456”?,單擊“登錄”按鈕后會(huì)顯示登錄成功的提示,如圖所示。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue全局?jǐn)r截所有請求并在請求頭中添加token方式

    Vue全局?jǐn)r截所有請求并在請求頭中添加token方式

    這篇文章主要介紹了Vue全局?jǐn)r截所有請求并在請求頭中添加token方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解vue的數(shù)據(jù)binding綁定原理

    詳解vue的數(shù)據(jù)binding綁定原理

    這篇文章主要介紹了詳解vue的數(shù)據(jù)binding原理介紹,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • vue實(shí)現(xiàn)簡易選項(xiàng)卡功能

    vue實(shí)現(xiàn)簡易選項(xiàng)卡功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簡易選項(xiàng)卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 解決element UI 自定義傳參的問題

    解決element UI 自定義傳參的問題

    今天小編就為大家分享一篇解決element UI 自定義傳參的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue.js自定義指令學(xué)習(xí)使用詳解

    Vue.js自定義指令學(xué)習(xí)使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue.js自定義指令的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Vue3 寫法示例與規(guī)范詳細(xì)指南

    Vue3 寫法示例與規(guī)范詳細(xì)指南

    本文給大家介紹Vue3寫法示例與規(guī)范詳細(xì)指南,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-09-09
  • vue中的導(dǎo)航守衛(wèi)使用及說明

    vue中的導(dǎo)航守衛(wèi)使用及說明

    這篇文章主要介紹了vue中的導(dǎo)航守衛(wèi)使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue+element ui實(shí)現(xiàn)錨點(diǎn)定位

    vue+element ui實(shí)現(xiàn)錨點(diǎn)定位

    這篇文章主要為大家詳細(xì)介紹了vue+element ui實(shí)現(xiàn)錨點(diǎn)定位,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • VUE項(xiàng)目axios請求頭更改Content-Type操作

    VUE項(xiàng)目axios請求頭更改Content-Type操作

    這篇文章主要介紹了VUE項(xiàng)目axios請求頭更改Content-Type操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法詳解

    vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法詳解

    這篇文章主要介紹了vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法,結(jié)合實(shí)例形式詳細(xì)描述了中文亂碼問題的原因、解決方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-06-06

最新評論

读书| 虎林市| 瑞昌市| 南部县| 江津市| 那坡县| 惠州市| 田林县| 平定县| 大石桥市| 涟源市| 梓潼县| 湖北省| 无锡市| 乌海市| 碌曲县| 安仁县| 江西省| 平潭县| 阿克陶县| 噶尔县| 昌吉市| 石渠县| 桐乡市| 墨江| 公安县| 沁水县| 驻马店市| 历史| 定陶县| 错那县| 临沭县| 毕节市| 喀喇沁旗| 乌恰县| 阳春市| 九龙城区| 常山县| 乐亭县| 淮南市| 资兴市|