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

vue中如何進行異步請求

 更新時間:2022年05月26日 08:46:54   作者:star-1331  
前端的數(shù)據(jù)均是通過接口請求拿到的,而Vue本身不支持ajax請求,那么該怎么解決Vue中的異步請求呢?這兒提供了幾種方法,希望對大家有所幫助

如何進行異步請求

一、axios實現(xiàn)異步請求

1.項目中安裝axiox

npm install --save axios

2.在main.js中引入以供全局使用

import axios from 'axios'
//可以給axios的ajax請求設(shè)置統(tǒng)一的主機和端口號
axios.defaults.baseURL = "http://157.122.54.189:8080/";
//將axios這個對象添加到Vue的原型對象中,在使用的時候就只需要使用this.對象名就可以了
Vue.prototype.$http = axios

3.axios之get請求

vue前端:

<template>
?? ?<div>
?? ?</div>
</template>
<script>
export default {
? methods:{
? ?? ?getData(){
? ?? ??? ?//axios-get請求
? ?? ??? ?this.$http.get('/getData1')
?? ? ? ? ? ?.then(r => console.log(r))//接口調(diào)用成功返回的數(shù)據(jù)
?? ? ? ? ? ?.catch(err => console.log(err)),//接口調(diào)用失敗返回的數(shù)據(jù)
? ? }
? }
? mounted(){//模板或el對應(yīng)的html渲染完成后再調(diào)用里面的方法
?? ?this.getData()
? }
}
</script>
<style lang="scss" scoped>
?? ?
</style>

node后端:

server.get('/getData1',function(req,res){
  res.send({
    'msg':'aaa'
  })
})

請求結(jié)果:

這里寫圖片描述

4.axios之post請求

Vue前端:

提交參數(shù)的兩種形態(tài):

// 1.可以直接傳入字符串 name=張三&age=19

// 2.可以以對象的形式傳入{name:“三”,age:19}

<template>
?? ?<div>
?? ?</div>
</template>
<script>
export default {
? methods:{
? ?? ?getData(){
? ?? ??? ?//axios-post請求傳值
? ? ? this.$http({
? ? ? ? ? method:"post",
? ? ? ? ? url:"/getData2",
? ? ? ? ? headers:{
? ? ? ? ? ? ? 'Content-type': 'application/x-www-form-urlencoded'
? ? ? ? ? },
? ? ? ? ? data:{
? ? ? ? ? ? ? name:'xxx'
? ? ? ? ? },
? ? ? ? ? transformRequest: [function (data) {//更改傳值格式
? ? ? ? ? ? ? let ret = ''
? ? ? ? ? ? ? for (let it in data) {
? ? ? ? ? ? ? ? ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
? ? ? ? ? ? ? }
? ? ? ? ? ? ? return ret.slice(0,ret.length-1)
? ? ? ? ? ? }],
? ? ? })
? ? ? ? .then(r => console.log(r))
? ? ? ? .catch(err => console.log(err))
? ? }
? }
? mounted(){//模板或el對應(yīng)的html渲染完成后再調(diào)用里面的方法
?? ?this.getData()
? }
}
</script>
<style lang="scss" scoped>
?? ?
</style>

node后端:

server.post('/getData2',function(req,res){
  req.on("data",function(data){
      console.log(querystring.parse(decodeURIComponent(data)));
  });
  res.send({
    'msg':'bbb'
  })
})

結(jié)果:

這里寫圖片描述

這里寫圖片描述

看到這兒,你可能會疑惑,為什么post請求這么繁瑣。這和axios post方法默認使用application/json格式編碼數(shù)據(jù)有關(guān),生成的數(shù)據(jù)格式是request payload,并不是我們常用的Form data格式(表單數(shù)據(jù)格式)。

使用這種編碼方式,傳遞到后臺的將是序列化后的json字符串,而不是我們想要的對象的形式,后端拿到的值則用原有的解析方式無法解析,則會解析出錯誤的數(shù)據(jù)。故而,這里前端可以現(xiàn)將其轉(zhuǎn)化一下,轉(zhuǎn)化成鍵值對的形式再傳給后端,后端再稍作處理就可以正常使用。

當然,也可以后端去做出解決,而且解決方式更加簡單一些,針對Node直接將傳過來的json字符串用body-parser中間件進行解析就好。

server.post('/getData2',bodyParser.json(),function(req,res){
    console.log(req.body);
    res.send({
      'msg':'bbb'
    })
});

二、vue-resource實現(xiàn)異步請求(和axios步驟基本相同)

1.項目中安裝vue-resource

npm install --save vue-resource

2.在main.js中引入以供全局使用

import vueResource from 'vue-resource'
Vue.use(vueResource)//這兒有所不同

3.vue-resource之get請求

this.$http.get('/getData1')
    .then(r => console.log(r))//接口調(diào)用成功返回的數(shù)據(jù)
    .catch(err => console.log(err)),//接口調(diào)用失敗返回的數(shù)據(jù)

4.vue-resource之post請求

this.$http.post('/getData2',{name:"bbb"})
    .then(r => console.log(r))//接口調(diào)用成功返回的數(shù)據(jù)
    .catch(err => console.log(err)),//接口調(diào)用失敗返回的數(shù)據(jù)

5.vue-resource之jsonp請求

this.$http.jsonp('/getData3')
    .then(r => console.log(r))//接口調(diào)用成功返回的數(shù)據(jù)
    .catch(err => console.log(err)),//接口調(diào)用失敗返回的數(shù)據(jù)

注意

如果在使用jsonp之后還是無法獲取到跨域的數(shù)據(jù),前端可以使用代理的方式,假裝是從同一域下請求的數(shù)據(jù),修改config下index文件,如下圖:

在最后調(diào)用的時候直接:

this.$http.get('/api/接口')

vue接口異步請求

 // 查列表
    async getlist (pageIndex) { 
      let data = { 
        pageIndex,
        pageSize: this.pageSize
      }
      await getCouponPageList(data).then(res => {
        const { data: { code, msg, data } } = res
        if (code === 0) {
          data.list.forEach(v => {
            v.totalAmount = ''
            v.buyerPayAmount = ''
          })
          this.tableData = data.list
          data.list.forEach(async (ele, index) => {
            if (ele.status === this.$t('已使用')) {
              let temp = await this.couponGetAlipay(ele.billDetails)
              ele.totalAmount = temp.totalAmount / 100
              this.tableData[index] = ele
            }
          })
          this.dataCount = data.total
        } else {
          this.$Message.error(msg)
        }
        this.loading = false
      }).catch(err => {
        console.log(err.message)
      })
    },
    // 根據(jù)id查列表的后幾項
    couponGetAlipay (orderNo) {
      return new Promise((resolve, reject) => {
        couponGetAlipay({orderNo}).then(res => {
          const { data: { code, data } } = res
          if (code === 0) {
            resolve(data)
          }
        }).catch(err => {
          console.log(err.message)
        })
      })
    },

其他方法

一:

getData: async function() { // 同步方法
  try { // 順序請求
    await this.getSetupList();
    await this.getRoleList();
    await this.getList();
  } catch (e) {}
}

二:

getData: async function() { // 同步方法
  try { // 順序請求
    await this.getSetupList();
    await this.getRoleList();
    await this.getList();
  } catch (e) {}
}

三:

function login(code) {
  return new Promise((resolve, reject) => { // 同步方法
    getData1().then(response => { // 方法一
      return response // 返回正確值
    }).then((res) => {
      getData2().then((response) => { // 方法一返回正確后執(zhí)行方法二
        return response // 返回正確值
      }).then((res) => {
        getData3().then(response => { // 方法二返回正確后執(zhí)行方法三
          return response // 返回正確值
        }).then(res => {
          getData4().then(response => { // 方法三返回正確后執(zhí)行方法四
            resolve(response ) // 方法執(zhí)行完畢,拋出最后結(jié)果或進行某些操作
          }).catch(res => {
            reject('方法四返回錯誤')
          })
        }).catch(res => {
          reject('方法三返回錯誤')
        })
      }).catch(res => {
        reject('方法二返回錯誤')
      })
    }).catch(res => {
      reject('方法一返回錯誤')
    })
  })
}

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

相關(guān)文章

  • 使用vscode 開發(fā)uniapp的方法

    使用vscode 開發(fā)uniapp的方法

    本文給大家分享我使用vscode開發(fā)的一些配置。其中包括uniapp組件語法提示,uniapp代碼提示,代碼自動格式化問題,對vscode 開發(fā)uniapp的相關(guān)知識感興趣的朋友一起看看吧
    2021-08-08
  • vue項目netWork地址無法訪問的問題及解決

    vue項目netWork地址無法訪問的問題及解決

    這篇文章主要介紹了vue項目netWork地址無法訪問的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • elementui之el-table如何通過v-if控制按鈕顯示與隱藏

    elementui之el-table如何通過v-if控制按鈕顯示與隱藏

    這篇文章主要介紹了elementui之el-table如何通過v-if控制按鈕顯示與隱藏問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 用vue2.0實現(xiàn)點擊選中active其他選項互斥的效果

    用vue2.0實現(xiàn)點擊選中active其他選項互斥的效果

    這篇文章主要介紹了用vue2.0實現(xiàn)點擊選中active其他選項互斥的效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Vue請求JSON Server服務(wù)器數(shù)據(jù)的實現(xiàn)方法

    Vue請求JSON Server服務(wù)器數(shù)據(jù)的實現(xiàn)方法

    這篇文章主要介紹了Vue請求JSON Server服務(wù)器數(shù)據(jù)的實現(xiàn)方法,需要的朋友可以參考下
    2018-11-11
  • Element-plus使用中遇到的問題小結(jié)

    Element-plus使用中遇到的問題小結(jié)

    表格數(shù)據(jù)是websocket通信獲取的數(shù)據(jù),首次獲取20條數(shù)據(jù),以后新增訂閱獲取一條,新增一條則向上滑動顯示最新數(shù)據(jù),本文給大家介紹Element-plus使用中遇到的問題小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • vue添加vue-awesome-swiper輪播組件方式

    vue添加vue-awesome-swiper輪播組件方式

    這篇文章主要介紹了vue添加vue-awesome-swiper輪播組件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 解決element DateTimePicker+vue彈出框只顯示小時

    解決element DateTimePicker+vue彈出框只顯示小時

    這篇文章主要介紹了解決element DateTimePicker+vue彈出框只顯示小時,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • ElementPlus表格中的背景透明解決方案

    ElementPlus表格中的背景透明解決方案

    最近寫大屏,用到elementplus中的el-table,為了讓顯示效果好看一點,需要把表格的白色背景調(diào)整為透明,與整個背景融為一體,本文給大家介紹ElementPlus表格中的背景透明解決方案,感興趣的朋友一起看看吧
    2023-10-10
  • vue v-on:click傳遞動態(tài)參數(shù)的步驟

    vue v-on:click傳遞動態(tài)參數(shù)的步驟

    這篇文章主要介紹了vue v-on:click傳遞動態(tài)參數(shù)的步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

盈江县| 抚顺市| 金山区| 偃师市| 梁平县| 白山市| 隆子县| 五河县| 靖西县| 秦安县| 彭山县| 万全县| 岚皋县| 修水县| 探索| 中卫市| 杭锦后旗| 鄄城县| 牙克石市| 卓尼县| 周口市| 灌云县| 长宁区| 彝良县| 图木舒克市| 富阳市| 武宁县| 淮南市| 昌黎县| 城固县| 陈巴尔虎旗| 六盘水市| 佛教| 水城县| 阳西县| 鱼台县| 海门市| 沙湾县| 格尔木市| 广宗县| 江都市|