vue之axios数据请求

本文介绍了axios在Vue项目中的使用,重点讲解了如何进行GET和POST请求。在POST请求中,以携程一日游数据为例,详细阐述了请求参数配置和封装过程;在GET请求中,以美团酒店数据为例,展示了如何发起请求并获取数据。

一、axios是啥?
它是一个基于Promise的HTTP库,也是当前比较火的一个http请求插件(get,post等),使用起来简单快捷,不需要复杂的配置。
二、主要功能(官方介绍)
1 从浏览器中创建 XMLHttpRequests
2 从 node.js 创建 http 请求
3 支持 Promise API
4 拦截请求和响应
5 转换请求数据和响应数据
6 取消请求
7 自动转换 JSON 数据
8 客户端支持防御 XSRF

三、在实际项目中使用axios(主要介绍在vue中的使用,通过get和post两种方式说明)

1 post请求

需求: 测试网站为携程,通过post请求获取一日游的数据

1 网址携程一日游链接地址
在这里插入图片描述
2 查看官网一日游请求数据格式

请求url红框标注
在这里插入图片描述
携带的参数,除了head,其它都要带上
在这里插入图片描述
3 对get 和 post请求做一个简单的封装

首先全局安装一下axios:
npm i axios -S

封装请求:
主要为了方便后面的调用以及业务扩展

import axios from 'axios';
// get请求
export const get = (url,params)=>{
    return axios.get(url,params)
}
//post请求
export const post = (url,params)=>{
    return axios.post(url,params);
}

写post请求接口

import {get,post} from './http';
export const getOneData = (params)=>{
// 该路径是刚才截图中红框标注的,前面加了一个api做了一个代理,因为是跨域访问的
    let url = '/api/restapi/soa2/10220/json/RecommendActivityList';
    return post(url,params)
}

写代理,首先在根目录下新建一个vue.config.js(命名唯一)

module.exports =  {
    devServer:{
    // 这个可以用来修改使用vue-cli脚手架启动时候的默认端口(这里配置后,在package.json文件serve启动项中也需要将这个端口执行一下)
       port:5300,
       // 这里配置代理
       proxy:{
       //只要含有api的都会转到target这个地址,
           '/api':{
               target:"https://sec-m.ctrip.com",
               // 允许跨域
               changeOrigin:true,
               // 路径重写,这里不需要api需要直接转为空字符串就行了
               pathRewrite:{
                    '^/api':''
               }
           }
       }
    }
}

调用接口

import {getOneData} from '@/api/oneday.js'
export default {
  data(){
    return {
      message:"hello world",
    }
  }, 

  async created(){
  // 这里为了测试方便我就直接将参数添加进来了,实际项目中这些参数是动态的,最好挡在data中同一管理
    let rs = await getOneData({
      catecode:'1daytrip',
        cateid: 40,
        contentType: "json",
        debug: false,
        gsadistid: 2,
        limit: 41,
        noFormat: true,
        size: null,
        smode: "DayJx",
        ver: "8.3.2",
    })
    console.log(rs);
  }
}

浏览器查看请求结果
从下图可以看出数据已经正常请求回来了
在这里插入图片描述
数据拿回来了后面就根据你的测试需求处理就行了

2 get请求

这里以美团为测试网址: 测试酒店数据链接
需求: 通过get请求获取检索出来的酒店数据
在这里插入图片描述
1 查看一下官网是如何请求的

url地址:
在这里插入图片描述
携带的参数:
在这里插入图片描述
2 写接口、配置代理(前面介绍过,这里直接上代码,不细说了)

请求接口:

export const getHotelData = (params)=>{
    let url = '/mtapi/hbsearch/HotelSearch';
    return get(url,params);
}

代理设置:

'/mtapi': {
	target: "https://ihotel.meituan.com",
    changeOrigin: true,
    pathRewrite: {
       '^/mtapi': ''
    }
}

调用接口

let mt = await getHotelData({
      utm_medium: "touch",
      version_name: "999.9",
      platformid: 1,
      cateId: 20,
      newcate: 1,
      limit: 20,
      offset: 40,
      cityId: 1,
      ci: 1,
      startendday: "20200412~20200412",
      startDay: 20200412,
      endDay: 20200412,
      mypos: "31.974135,114.307924",
      attr_28: 130,
      sort: "defaults"
    });
    console.log(mt);

测试结果: 可以看到数据已经成功,下面是某一条数据展示效果
在这里插入图片描述

Vue 3中使用axios请求后端表格数据,可参考以下步骤实现: ### 1. 安装并导入axios 首先要安装axios,可使用npm或yarn进行安装: ```bash npm install axios ``` 或者 ```bash yarn add axios ``` 接着在Vue 3组件里导入axios: ```vue <script setup> import axios from &#39;axios&#39;; import { ref } from &#39;vue&#39;; // 定义表格数据的响应式变量 const tableData = ref([]); const totalLength = ref(0); </script> ``` ### 2. 配置代理(可选) 若需要跨域请求数据,可以在`vite.config.ts`文件中配置代理。示例如下: ```typescript // vite.config.ts import { defineConfig } from &#39;vite&#39;; import vue from &#39;@vitejs/plugin-vue&#39;; import path from "path"; export default defineConfig({ plugins: [vue()], server: { port: 4000, proxy: { "/api": { target: "https://www.fastmock.site/mock/15a3f8addfbc34c652777f67064eb49f/", changeOrigin: true, }, }, }, resolve: { alias: { &#39;@&#39;: path.resolve(__dirname, &#39;./src&#39;), }, }, }); ``` ### 3. 发起请求获取数据 在组件里编写请求函数,使用axios请求后端数据并将数据赋值给响应式变量。示例如下: ```vue <script setup> import axios from &#39;axios&#39;; import { ref, onMounted } from &#39;vue&#39;; const tableData = ref([]); const totalLength = ref(0); const getInitialData = async () => { try { const data = { page: 1, limit: 10, state: 4, }; const resp = await axios.post("/api/goods/goods_order", data); tableData.value = resp.data.data; totalLength.value = resp.data.count; } catch (error) { console.error(&#39;请求出错:&#39;, error); } }; onMounted(() => { getInitialData(); }); </script> ``` ### 4. 在模板中展示表格数据 使用`<el-table>`(以Element UI为例)展示请求到的数据: ```vue <template> <el-table :data="tableData"> <el-table-column prop="count" label="数量" /> <!-- 可根据后端返回的数据结构添加更多列 --> </el-table> </template> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值