前端在vue里,封装ajax请求,并解决跨域问题

一、封装ajax
1、首先创建vue项目的时候,会创建一个api文件夹,然后这个里面包含index.js和ajax.js文件
描述:index.js文件里面需要放我们多个接口的请求函数。
ajax.js文件里需要些我们封装的ajax请求函数
2、在要请求接口的页面里 引入api/index文件,然后在mounted里面调用index里写好的函数,并发起请求
3、记得axios要先 npm i --save axios下载
贴上对应的代码

ajax.js文件代码

/**
 * ajax请求接口函数模块
 * 返回一个promise对象,(异步返回的数据是response.data数据)
 */
import axios from "axios"
export default function ajax(url, data = {}, type = 'GET') {
  return new Promise(function (resolve, reject) {
    let promise
    if (type === "GET") {
      // 准备 url query 参数数据
      let dataStr = '' //数据拼接字符串
      Object.keys(data).forEach(key => {
        dataStr += key + '=' + data[key] + '&'
      })
      if (dataStr != '') {
        dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
        url = url + '?' + dataStr
      }
      //   发送get请求
      promise = axios.get(url)
    } else {
      // 发送 post 请求
      promise = axios.post(url, data)
    }
    // 拿到response.data数据
    promise.then(response => {
        // 成功调用resolve
      resolve(response.data)
    }).catch(error => {
        // 失败调用reject
      reject(error)
    })
  })
}

index.js文件

/*
*包含n个接口的请求函数

*/
import ajax from "./ajax";
// 传参形式两种,1、query形式 就是 {},这个是拼接到url地址?后面的参数,
// 2、params形式,直接传就行
 
// const BASE_URL='http://localhost:4000';
const BASE_URL="/api"

// 根据经纬度获取位置详情
export const reqAddress= (geohash)=>ajax(`${BASE_URL}/position/${geohash}`)
// [2、获取食品分类列表](#2获取食品分类列表)<br/>
export const reqFoodType= ()=>ajax(BASE_URL+"/index_category")

xxx.vue文件

import {reqFoodType,reqAddress} from './api'
export default {
  // 请求接口在mounted
  async  mounted(){
    const result=await reqFoodType()
    console.log(result)
    const result2=await reqAddress("40.10038,116.36867")
    console.log(result2)
  },
  // 映射FooterGuide组件
  components: {
    FooterGuide,
  },
};

二、解决跨域
1.在config/index.js文件中修改proxyTable

// 解决跨域
proxyTable: {
  '/api':{//匹配所有以 /api 开头的请求路径
    target:"http://localhost:4000",//代理目标的基础路径
    changeOrigin:true,//支持跨域
    pathRewrite:{//重写路径,去掉开头的 /api
      "^/api":''
    }
  }
},

搞定,跟着视频学习的,很有效果,所以就记录一下笔记。大家也可以参考一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值