Vue 中使用jsonp来解决跨域问题

2021-05-12  本文已影响0人  mark666

Vue 中要利用jsonp来解决跨域问题,可以引入vue-jsonp

安装

npm install vue-jsonp

引入

import { VueJsonp } from 'vue-jsonp'
 
// Vue Plugin.
Vue.use(VueJsonp)

这里要特别注意一点,网上很多文章都写着 import VueJsonp from 'vue-jsonp',实际你使用过程中,会报错 undefined,其实我们看源码也可以得知导入方式

使用

具体使用我们可以参考

这里需要特别注意一点,使用文档上也没有说明,如果我们回调的方法名不指定的话,默认是jsonp_,如果服务器返回不一致的话,我们可以指定 callbackName
具体代码示例如下:

this.$jsonp(
        `http://localhost:8081',
        {
          callbackQuery: 'jsonpcallback',
          //指定回调的查询字符串的名称(默认callback),后端可能自定义,比如当前案例约定的是jsonpcallback
          callbackName: 'jsonpFunc' //回调函数方法名称
       }
      ).then(data => {
        console.log(data);
      });

2021-6-10更新

jsonp方法在并发情况下发生报错

Uncaught ReferenceError: jsonp_ is not defined

造成以上错误的原因是使用了相同的jsonpCallback, jsonpCallback请求完成后会删除回调方法,所以当两个jsonp请求使用相同的jsonpCallback时就会造成冲突。

所以解决起来很容易,根据不同的请求设置不通的callbackName 即可

this.$jsonp(
        `http://localhost:8081',
        {
          callbackName: 'jsonpFunc'  + '' "  // 根据不同的请求设置不同标识
       }
      ).then(data => {
        console.log(data);
      });
上一篇下一篇

猜你喜欢

热点阅读