自己写的jsonp跨域文件

jsonp跨域实现代码

  • 在项目中全局安装jsonp插件,使用npm install -g jsonp
  • 在service文件夹下建立http.js文件,文件在下面
  • 在main.js文件里全局引用service ,图片如下
  • 在需要使用跨域的组件了里使用jsonp进行跨域, 使用代码方式如下

在这里插入图片描述
http.js文件:

import Jsonp from 'jsonp'
import Qs from 'qs'

class Http {
  jsonp (url, data = {}, config = {}) {
    return new Promise((resolve, reject) => {
      const _urlObj = this._parseUrl(url)
      const _data = Object.assign({}, _urlObj.query, data)

      let _url = `${_urlObj.url}${Qs.stringify(_data, {addQueryPrefix: true})}`
      let _config = Object.assign({
        param: 'callback',
        timeout: 3000
      }, config)

      Jsonp(_url, _config, function (err, res) {
        if (err) {
          reject(err)
        } else {
          resolve(res)
        }
      })
    })
  }

  _parseUrl (url = '') {
    const _query = (url.match(/(\?.*$)/) || [''])[0]
    const _url = url.replace(_query, '')
    let _data = {}
    if (_query) {
      _data = Qs.parse(_query, {ignoreQueryPrefix: true})
    }
    return {
      url: _url,
      query: _data
    }
  }
}

export default new Http()

main.js文件里全局引用service
在这里插入图片描述
使用jsonp进行跨域

const url = 'https://api.service.100tal.com/sso/qrcode/status'
  this.$http.jsonp(url, {
                uuid: this.uuid || ''
            })
            .then(res => {
                if (res) {
                    this.getDingdingLogin(res)
                } else {
                    console.log('jsonp请求失败')
                }
            })
            .catch(err => {
                window.clearInterval(this.qrcodeTimer) // 清除计时器
            })

猜你喜欢

转载自blog.csdn.net/qq_32885597/article/details/88064319
今日推荐