Vue+Gin之jsonp跨域

前端jsonp

vue-jsonp方式:

  1. 添加依赖:npm install vue-jsonp --save
  2. 在main.js中添加:
    import VueJsonp from 'vue-jsonp'
    Vue.use(VueJsonp);
    
    
  3. 在组件中使用
    jsonpFetch(){
          const url = 'http://127.0.0.1:8081/jsonp';
          this.$jsonp(url,{
          }).then((data)=>{
            console.log(data)
          })
        }
    

详细用法请参考:https://github.com/LancerComet/vue-jsonp#readme

axios方式(建议采用CORS的方式)

  1. npm install jsonp --save
  2. 在组件中使用:
    const axiosJsonp = require("jsonp");
    
    jsonpFetch() {
          // const url = 'http://127.0.0.1:8081/jsonp';
          // this.$jsonp(url,{
          // }).then((data)=>{
          //   console.log(data)
          // })
          axiosJsonp("http://127.0.0.1:8081/jsonp", null, (err, data) => {
            if (err) {
              console.error(err.message);
            } else {
              console.log(data);
            }
          });
        }
    

后端

gin的jsonp的参数是callback,前端一般也是默认callback,后端也一定要用jsonp,换成json或者其他的话将不能获取数据:
在这里插入图片描述

// JSONP serializes the given struct as JSON into the response body.
// It add padding to response body to request data from a server residing in a different domain than the client.
// It also sets the Content-Type as "application/javascript".
func (c *Context) JSONP(code int, obj interface{}) {
	callback := c.DefaultQuery("callback", "")
	if callback == "" {
		c.Render(code, render.JSON{Data: obj})
		return
	}
	c.Render(code, render.JsonpJSON{Callback: callback, Data: obj})
}
func StartServer(){

	r := gin.Default()
	r.GET("/jsonp", func(context *gin.Context) {
		context.JSONP(200,gin.H{
			"message":"data",
		})
	})
	r.Run(":8081") // listen and serve on 0.0.0.0:8081

}

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值