基于vue-resource jsonp跨域问题的解决方法
作者:jingxian 发布时间:2023-07-02 16:33:44
最近在学习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)
}
})
这时候我们看到控制台并没有如我们所愿,输出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数据上,这时候就可以了!
来源:http://blog.csdn.net/yusirxiaer/article/details/77188850
猜你喜欢
- iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库。 1、下载libiconv函数库http://ftp.gnu
- hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用hints来实现:  
- 简单版本,按照李航的《统计学习方法》的思路编写数据采用了著名的sklearn自带的iries数据,最优化求解采用了SGD算法。预处理增加了标
- 本文介绍了react-native ListView下拉刷新上拉加载实现。分享给大家,具体如下:先看效果图下拉刷新React Native提
- 1.字符串大小写转换string.title() #将字符串中所有单词的首字母以大写形式显示string.upper() #将字符串中所有字
- 一、什么是ttkbootstrap?官方文档 [较慢]:https://ttkbootstrap.readthedocs.io/en/lat
- 主要作用为指定图片像素:matplotlib.rcParams[‘figure.figsize']#图片像素 matplotlib.
- 在解决日常的支持需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境
- 一、概述SQL SERVER2012 之前版本,一般采用GUID或者IDENTITY来作为标示符。在2012中,微软终于增加了 SEQUEN
- 1、介绍在爬虫中经常会遇到验证码识别的问题,现在的验证码大多分计算验证码、滑块验证码、识图验证码、语音验证码等四种。本文就是识图验证码,识别
- 1. 配置并更新树莓派系统sudo raspi-config // 进入后打开摄像头、SSHsudo apt-get updatesudo
- 简单概述js变量可以划分为两种不同的数据类型:基本类型:undefined、null、Boolean、Number、String、Symbo
- 前言实现一个帧动画,使用的一个图,根据不同的时间显示不同的图。使用的就是如下所示的一张图,宽度780 * 300 ,使用加载图片 260 *
- 默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为W
- 无论是我们上学时还之后的工作中,基本都需要用到电子证件照片,这类照片基本都对照片尺寸、背景色有要求,本文我们来看一下如何只用不到 20 行
- 效果展示数据集展示数据集来源:使用了开源数据集FaceMask_CelebAgithub地址:https://github.com/seve
- 可以加上时间判断,让程序在固定的时间启动。#coding=utf-8#!/usr/bin/pythonimport osdef open_a
- 目录前言数据结构常规实现string转[]byte[]byte转string高效实现性能测试总结前言当我们使用go进行数据序列化或反序列化操
- 本文web服务器使用的为apache。1. 安装apacheyum install -y httpd2. 配置apache修改apache配
- 平时我们获取事件对象一般写法如下:function getEvent(event) { return event