基于vue-resource jsonp跨域问题的解决方法


Posted in Javascript onFebruary 03, 2018

最近在学习vue.js 碰到个ajax跨域请求的问题,之前知道可以用jsonp解决,但是一直没实践过,这次用发现里面好多问题,所以现在记录下来,希望可以给刚接触使用jsonp的同学一点帮助!

关于什么是jsonp,以及为什么要用jsonp我就不多说了,不明白的同学自行百度一下。

我们先来说一下jQuery里面的jsonp请求,这搞懂了 vue-resource 里面的jsonp就容易明白了。

这里我以json数据为例,首先我们通过 $.get可以直接得到一个我们想要的对象,但是用 jsonp 就会出现报错代码如下,

$.ajax({
 url:"http://192.168.8.59/weixinvip/VIP/ERP/Home/api.ashx?a=getwxativity&i=1",
 type:"GET",
 dataType:"jsonp",
 sccuess:function(data){
  console.log(data)
 }
})

基于vue-resource jsonp跨域问题的解决方法

这时候我们看到控制台并没有如我们所愿,输出data数据,而是报错了。

这个时候我们查看Network,看到实际上已经请求到了数据

基于vue-resource jsonp跨域问题的解决方法

基于vue-resource jsonp跨域问题的解决方法

我们可以看到请求成功了,状态码200,数据也返回了,但是为什么还是报错了呢?

这就要我们分析下jsonp的原理了:

首先在发送ajax的时候,正常我们是拿到了一段json数据,但是JS是不方便直接操作json数据的,这个时候jQuery已经自动帮我们解析成了一个JS对象;

我们都知道jsonp实际上是相当于用JavaScript加载脚本的方式将数据加载进来的

说到这里我想有些同学大概已经明白为什么会报错了,其实这个时候就是直接在页面中加入了一段script,里面的内容就是返回给我们的数据

<script src="http://192.168.8.59/weixinvip/VIP/ERP/Home/api.ashx?a=getwxativity&i=1"></script>

现在我们再来想想,这段JavaScript代码,其实就是一段没有意义的对象了,因为没有将它赋值个一个变量,你是无法拿到;所以这个时候我们就需要后台同事的配合了,我相信说到这里,大家应该都明白怎么做了,所以jQuery的ajax我们就不多说了。

今天我们主要是说一下vue-resource 里面的jsonp跨域请求问题

闲话不多说,直接上代码:

var vm = new Vue({
 el:'#signRecord',
 data:{},
 beforeMount:function(){
  this.$http.jsonp("http://192.168.8.59/weixinvip/VIP/ERP/Home/api.ashx?a=getwxativity&i=1")
  .then(function(data){
   console.log(data)
  })
 }
})

基于vue-resource jsonp跨域问题的解决方法

同样报错了,而且vue-resource还多给我们报了一个错,我们再来看看network

基于vue-resource jsonp跨域问题的解决方法

基于vue-resource jsonp跨域问题的解决方法

同样请求成功,数据也拿到了,但是就是报错。我们注意看一下请求头,会发现多了一个参数

基于vue-resource jsonp跨域问题的解决方法

基于vue-resource jsonp跨域问题的解决方法

这个参数是干嘛的呢?我们看看源码

基于vue-resource jsonp跨域问题的解决方法

这里我们可以看到,实际上callback是随机生成的字符串,并且这个参数名我们也可以自己给他命名,如果没指定,默认是“callback”,既然

默认传递的参数,那就肯定是有用的。

其实vue发送jsonp还有两个参数,我们来看看

Vue.http.jsonp(url,{params: {pageID:29},jsonp:"_callback"}) //这步就是关键,改callback名

这里params是要发送的数据对象,jsonp是设置回调的名称,也就是上面的callback名称;(不设置默认为callback),现在我们就需要

后台协助一下,获取我们发送过去的"_callpack"的值,将这个值拼接到返回的json数据上,这时候就可以了!

Javascript 相关文章推荐
javascript 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
jQuery ajax 路由和过滤器使用说明
Aug 02 Javascript
jquery实现奇偶行赋值不同css值
Feb 17 Javascript
Javascript的时间戳和php的时间戳转换注意事项
Apr 12 Javascript
JS实现的表格行鼠标点击高亮效果代码
Nov 27 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
JS实现直接运行html代码的方法
Mar 13 Javascript
Angular中的$watch、$watchGroup、$watchCollection
Jun 25 Javascript
jQuery+ajax实现修改密码验证功能实例详解
Jul 06 jQuery
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 #Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 #Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 #Javascript
JavaScript实现求最大公共子串的方法
Feb 03 #Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 #Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 #Javascript
JS删除数组里的某个元素方法
Feb 03 #Javascript
You might like
Linux编译升级php的详细方法
2013/11/04 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
vue 优化CDN加速的方法示例
2018/09/19 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
解析Python编程中的包结构
2015/10/25 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
简单的项目建议书模板
2014/03/12 职场文书
物理学专业自荐信
2014/06/11 职场文书
读群众路线的心得体会
2014/09/03 职场文书
一般党员对照检查材料
2014/09/24 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
同学聚会通知短信
2015/04/20 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Python基础之函数嵌套知识总结
2021/05/23 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL