封装axios+Promise

ajax请求模块:

/*
ajax 请求函数模块
*/
import axios from 'axios'

/**
 * 向外部暴漏一个函数 ajax
 * @param {*} url 请求路径,默认为空
 * @param {*} data 请求参数,默认为空对象
 * @param {*} type 请求方法,默认为GET
 */

export default function ajax (url = '', data = {}, type = 'GET') {

  // 返回值 Promise对象 (异步返回的数据是response.data,而不是response)

  return new Promise(function (resolve, reject) {

    // (利用axios)异步执行ajax请求

    let promise // 这个内部的promise用来保存axios的返回值(promise对象)

    if (type === 'GET') {
      // 准备 url query 参数数据
      let dataStr = '' // 数据拼接字符串,将data连接到url
      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)
    }

    promise.then(response => {
      // 成功回调resolve()
      resolve(response.data)
    }).catch(error => {
        // 失败回调reject()
        reject(error)
      })

  })

}

调用:

引入上面封装的ajax模块,这里面注意路径问题

import ajax from './ajax'
const BASE_URL = '/api'     //跨域处理


/**
 * 根据经纬度和关键字搜索商铺列表
  */
export const reqSearchShop = (geohash, keyword) => ajax(BASE_URL + '/search_shops', {geohash, keyword})
/**
 * 账号密码登录
 */
export const reqPwdLogin = ({name, pwd, captcha}) => ajax(BASE_URL + '/login_pwd', {name, pwd, captcha}, 'POST')

 Vue组件中使用下面的方式调用:

async login () {

    result = await reqPwdLogin({name, pwd, captcha})

}
注意:await 相当于 Promise对象调用了then函数,也就是await Promise 就可以直接获取成功回调的返回结果!

 

 

### 如何在 Vue 项目中使用 Axios 进行 HTTP 请求 要在 Vue 项目中使用 Axios 发起 HTTP 请求,可以按照以下方式实现。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。 #### 安装 Axios 首先,在 Vue 项目中安装 Axios 库: ```bash npm install axios ``` #### 配置 Axios 实例 为了更好地管理请求配置,通常会创建一个独立的文件来封装 Axios 实例。例如: ```javascript // src/utils/axiosInstance.js import axios from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com/', // 设置基础 URL timeout: 10000, // 超时时间 (毫秒) }); export default instance; ``` 通过这种方式定义了一个全局可用的 Axios 实例,并设置了默认的基础路径和其他选项。 #### 创建 API 方法 类似于 `getRoles` 函数的功能,可以在单独的服务模块中编写方法用于发起特定类型的请求。例如: ```javascript // src/api/exampleApi.js import request from '@/utils/axiosInstance'; export function uploadFile(data) { return request({ url: '/file/upload', method: 'post', data, headers: { 'Content-Type': 'multipart/form-data' } }); } ``` 上述代码片段展示了如何利用 Axios 来上传文件[^1]。 #### 使用服务函数发送请求 在组件内部调用这些已定义好的服务函数即可完成数据交互操作。下面是一个简单的例子展示如何在一个 Vue 组件里执行 POST 请求并处理响应结果: ```vue <template> <div> <button @click="submitForm">Submit</button> </div> </template> <script> import { uploadFile } from '@/api/exampleApi'; export default { methods: { async submitForm() { try { const formData = new FormData(); formData.append('file', this.selectedFile); const response = await uploadFile(formData); console.log(response.data); // 处理返回的数据 } catch (error) { console.error(error.message || error.toString()); } }, }, }; </script> ``` 此部分实现了当按钮被点击时触发表单提交逻辑,并将选中的文件作为参数传递给后端接口。 对于 Django 后端应用而言,则需确保 WSGI_APPLICATION 已正确定义以便于 Web Server Gateway Interface 正常工作[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值