jsonp原生写法与vue写法
原生通常为了减轻web服务器的负载,我们把js、css,img等静态资源分离到另一台独立域名的服务器上,在html页面中再通过相应的标签从不同域名下加载静态资源,而被浏览器允许。即页面中的链接、重定向、表单提交不受同源策略限制。基于此原理,我们可以用 src 和 href 两个属性跨域访问。例如,通过动态创建script,再请求一个带参网址实现跨域通信。var script = document.
原生
通常为了减轻web服务器的负载,我们把js、css,img等静态资源分离到另一台独立域名的服务器上,在html页面中再通过相应的标签从不同域名下加载静态资源,而被浏览器允许。即页面中的链接、重定向、表单提交不受同源策略限制。基于此原理,我们可以用 src 和 href 两个属性跨域访问。
例如,通过动态创建script,再请求一个带参网址实现跨域通信。
var script = document.createElement('script');
script.type = 'text/javascript';
// 传参回调函数名 handleCallback 给后端,方便后端返回时执行这个在前端定义的回调函数
script.src = 'http://www.domain2.com:8080/login?user=admin&callback=handleCallback';
document.head.appendChild(script);
// 回调执行函数
function handleCallback(res) {
console.log('请求成功',res);
}
vue
npm install vue-jsonp --save-dev
main.js
import Vue from 'vue'
import VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp)
// 因为引入了vue-jsonp,所以可以直接使用this. j s o n p , V u e . u s e ( V u e J s o n p ) 方 法 里 把 jsonp, Vue.use(VueJsonp)方法里把 jsonp,Vue.use(VueJsonp)方法里把jsonp赋给vue原型了:Vue.prototype.$jsonp = jsonp
xx.js
mounted() {
window.jsonpCallback = (data) => {
console.log(data.token)
}
},
methods: {
getJson() {
this.$jsonp(url, {
params: obj
}).then((json) => {
// 返回的jsonp数据不会放这里,而是在 window.jsonpCallback
console.log(json)
})
},
}
更多推荐
所有评论(0)