美文网首页
ajax 请求

ajax 请求

作者: YM雨蒙 | 来源:发表于2019-05-22 20:10 被阅读0次

Vue开发中解决跨域问题

// vue.config.js
module.exports = {
    // 解决跨域 ①
    devServer: {
        // 把所有的接口代理到目标 url 下
        proxy: 'http://localhost:8080'
    }
}

// 解决跨域 ② 后端解决
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-COntrol-Allow-Headers', 'X-Requested-with,Content-Type')
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS')

Axios 配置请求拦截

// url.js
// baseURL

export const baseURL = process.env.NODE_ENV === 'production'
    ? 'http://api.production.com'  // 生产 url
    : ''  // 本地 url 配置了前端代理 ? '' : 'http://localhost:xxxx'
// axios.js
import axios from 'axios'
import { baseURL } from './url.js' 

class HttpRequest {
    constructor (baseUrl = baseURL) {  // 设置默认值
        this.baseUrl = baseUrl
        this.quene = {}  // 队列
    }
    getInsideConfig () {
        const config = {
            baseUrl: this.baseUrl,
            headers: {
                // ...
            }
        }
        return config
    }
    // 拦截器
    interceptors (instance, url) {
        instance.interceptors.request.use(config => {
            // 添加全局的loading
            if (!Object.keys(this.quene).length) {
                // Spin.show() loading
            }
            return config
        }, error => {
            return Promise.reject(error)
        })
        instance.interceptors.response.use(res => {
            delete this.quene[url]
            console.log(res)
            const { data, status } = res  
            return { data, status }
        }, err => {
            delete this.quene[url]
            return Promise.reject(err)
        })
    }
    request (options) {
        const instance = axios.create()
        options = Object.assign(this.getInsideConfig(), options)  // 合并到一个对象中
        this.interceptors(instance, options.url)
        return instance(options)
    }
}

export default HttpRequest
// index.js

import { HttpRequest } from './axios'

const axios = new HttpRequest()

export default axios
// user.js

import axios from './index'

export const getUserInfo = ({ userId }) => {
    return axios.request({
        url: '/getUserInfo',
        method: 'post',
        data: {
            userId
        }
    })
}
// home.vue

<script>
import { getUserInfo } from './user.js'
export default {
  methods: {
    getInfo() {
      getUserInfo({ userId: '1' }).then(res => {
        console.log(res)
      })
    }
  }
}
</script>

相关文章

  • ajax

    Ajax 1 - 请求纯文本 Ajax 2 - 请求JSON数据 Ajax 3 - 请求Github接口 Ajax...

  • ajax

    特点 ajax ajax入门 ajax请求与发送数据 ajax工具类封装 type:请求类型url:请求地址dat...

  • 2016-08-18 短信接口、ajax请求

    短信接口、ajax请求 ajax请求 $.ajax()方法详解 url type timeout: async: ...

  • HTML5权威指南 | 第五部分 高级功能

    三十二、使用AJAX(上) Ajax起步: 使用Ajax事件: Ajax请求的错误处理: 中止Ajax请求: 三十...

  • 链接

    javascript ajax get 请求 post请求 jqery ajax websocket

  • 用get、post方式发送ajax请求

    get方式发送ajax请求 post方式发送ajax请求

  • jquery AJAX方法

    $ajax()执行异步 AJAX 请求 $.ajaxSetup()为将来的 AJAX 请求设置默认值 $.get(...

  • 使用promise封装ajax请求

    封装一个ajax请求方法: 调用ajax方法,发送请求

  • Promise解析

    Promise使用场景 回调地狱:当你发送一个ajax请求,继而又需要请求一个ajax请求,并且此ajax请求参数...

  • jQuery+Ajax

    Ajax Ajax-HTTP请求 XMLHttpRequest发送请求 XMLHttpRequest取得响应 JS...

网友评论

      本文标题:ajax 请求

      本文链接:https://www.haomeiwen.com/subject/ljcpzqtx.html