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

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

  1. 我们先来说一下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)}
})

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

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

我们可以看到请求成功了,状态码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还多给我们报了一个错,我们再来看看network


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

 

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

这里我们可以看到,实际上callback是随机生成的字符串,并且这个参数名我们也可以自己给他命名,如果没指定,默认是“callback”,既然
默认传递的参数,那就肯定是有用的。
其实vue发送jsonp还有两个参数,我们来看看
Vue.http.jsonp(url,{params: {pageID:29},jsonp:"_callback"})     //这步就是关键,改callback名
    这里params是要发送的数据对象,jsonp是设置回调的名称,也就是上面的callback名称;(不设置默认为callback),现在我们就需要
后台协助一下,获取我们发送过去的"_callpack"的值,将这个值拼接到返回的json数据上,这时候就可以了!

vue-resource jsonp跨域问题解决方法相关推荐

  1. vue跨域问题解决方法

    vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报"No 'Access-Control-Allow-Origin' ...

  2. 前端vue框架的跨域处理方法

    一.jsonp跨域 npm install jsonp 然后创建一个jsonp.js 来使用jsonp import oringinJSONP from 'jsonp' export default ...

  3. Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx

    文章目录 概述 浏览器同源策略 后台搭建 pom.xml interceptor 配置 Controller 启动测试 浏览器和session 后端工程发布到服务器上 问题复现 通过Nginx反向代理 ...

  4. 前端跨域问题解决方法

    1 什么是跨域? 协议,端口,域名三者之中有一个不同就会构成跨域 2 什么是同源? 同源指的就是协议,端口,域名三者一一对应,就算两个不同的域名指向同一个IP地址,也非同源,同源也是浏览器安全功能的一 ...

  5. npm run dev 在本地调试出现跨域问题解决方法

    npm run dev 在本地调试出现跨域问题 在localhost:8080调试时会出现跨域问题,如图: 我的项目是用webpack作为前端自动化构建工具,可以在webpack-dev-server ...

  6. AJAX跨域问题解决方法(1)——禁止浏览器进行跨域限制

    思路:通过命令行修改浏览器启动参数,使得浏览器不进行跨域检查,从而允许跨域 方法:命令行参数启动浏览器后添加参数--disable-web-security 例: chrome --disable-w ...

  7. uni-app发布H5页面跨域问题解决方法

    uni-app提供了 最简单的 解决方案. 个人写的H5网页,因为没有服务器资源,所以需要经常调用其他网站的数据和资源,由于跨域问题,通常都无法访问其他网站.该方法非常适用于GET请求. 一.打开项目 ...

  8. vue-element-ui 中请求跨域问题解决方法

    找到 vue.config.js 把 默认红框中的内容注释掉改为黄框中的内容. 然后 更改 .env.development(开发配置文件),把 VUE_APP_BASE_API 中的内容改为 '/a ...

  9. Vue2前端请求API数据跨域问题解决

    Vue2前端请求API数据跨域问题解决方法 前端:Vue2 接口使用:API 问题报错提示: Access to XMLHttpRequest at 'http://localhost:9090/ec ...

最新文章

  1. buider模式的缺陷
  2. windown下linux子系统的安装和卸载
  3. 目标检测方法系列——R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD
  4. 如何在 ASP.Net Core 使用 内存缓存
  5. 第二篇: 在虚拟主机上使用ASP.NET Ajax
  6. Linux版本的安装文件jdk,tomcat
  7. 机器学习--支持向量机(一)什么是支持向量机
  8. 神策分析:三大价值搭建精细化渠道管理体系
  9. 软件工程的经典书籍有哪些?
  10. abp vnext数据库迁移(新建库)
  11. 高德纳(Donald Knuth)语录
  12. 欧拉公式以及凉鞋问题
  13. 「算法」FWT(快速沃尔什变换)
  14. Error inflating class出现报错
  15. Layui table内写done回调事件
  16. python海龟画笔速度_【判断题】Python海龟绘图中,设置画笔绘制速度的函数是speed()。...
  17. 自己写Shader-翻书效果
  18. 代码覆盖率在性能优化上的一种可行应用
  19. 数据安全运营体系建设
  20. mac 批量文件编码格式转换

热门文章

  1. ucos-ii在ARM7上移植
  2. 目标检测的图像特征提取—Haar特征
  3. git stash操作
  4. 一些机器学习数据集(Dataset)
  5. 需求分析与建模最佳实践_社交媒体和主题建模:如何在实践中分析帖子
  6. 大脑比机器智能_机器大脑的第一步
  7. api 规则定义_API有规则,而且功能强大
  8. 神经网络优化器的选择_神经网络:优化器选择的重要性
  9. md发布test-1 md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-
  10. 64位ubuntu kylin 16.04下制作tiny4412可用的SD启动卡