Vue项目中使用jsonp抓取跨域数据的方法


Posted in Javascript onNovember 10, 2019
  • 下载jsonp npm install jsonp
  • 在js文件夹下新增一个jsonp.js,来封装一个jsonp()

如何封装一个jsonp()

在下载的jsopn中,jsonp(url,options,callback)这个是原生jsonp方法中的参数;

引入下载的jsonp

import originJsonp from 'jsonp';

导出自己定义的jsonp函数

//这个jsonp函数是我们自己定义的,与上面的originJsonp不是同一个,originJsonp是一个可以直接引用的方法;她最        

终返回一个Promise对象

export default function jsonp(url, data, option){
  return new Promise((resolve,reject)=>{
  //调用originJsonp()来抓取数据
   originJsonp(url,option,(err,data)=>{ //callback是抓取数据结果
    if(!err){
    resolve(data)
    }ese{
    reject(err)
    }
   })
  })
}

在抓取的数据URL中常常会有参数传入,但是这些参数是对象格式,但是我们传入到originJsonp方法中的参数是拼接到url后面的,所以不能是对象的格式,这时就需要将对象格式的参数拼接到url后面组成新的URL

类似这样的一个url:( https://www.baidu.com/s?ie=ut... ;

这里参数data:{

ie:utf-8,
       rsv_bp:1
      }
export function param(data){
let urlData='';
for(let key in data){
 let value = data[k] !== undefined ? data[k] : '' ;//用来判断data是不是空
 //将data拼接起来
 if(vaule){
 urlData += ·'&'${k}=${encodeURIComponent(value)}·;//encodeURIComponent将进行网址的拼接   (encodeURIComponent()是将字符串转换成url地址
 }
}
 return urlData ? urlData.substring(1):''; //url.substring(1)的原因是,有可能这个url后面接的参数用的是'?‘;我们只需要将参数用‘&'连接起来,不用管URL后面紧接的那个符号【是?还是&】
}

将函数param引用到函数jsonp中

export default function jsonp(url, data, option) {
  return new Promise((resolve,reject)=>{
   //调用跨域请求函数
   //对URL进行拼接,首页需要判断URL后面是否有“?”,如果有这需要给param(data)添加“&”,不然需要给param(data)添加“?”
   url = url.indexOf('?')<0 ? '?':'&' + param(data);
   originJsonp(url,option,(err,data)=>{
    //这里的url就是完整的请求地址,需要包括参数
    if(!err){
     resolve(data) //请求成功
    }else{
     reject(err) //失败
    }
   })
  })
 }

总结

以上所述是小编给大家介绍的Vue项目中使用jsonp抓取跨域数据的方法,希望对大家有所帮助!

Javascript 相关文章推荐
JS 页面计时器示例代码
Oct 28 Javascript
使用js判断当前时区TimeZone是否是夏令时
Feb 23 Javascript
javascript监听鼠标滚轮事件浅析
Jun 05 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
Dec 08 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
使用jQuery实现简单的tab框实例
Aug 22 jQuery
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
vue自动化表单实例分析
May 06 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
Jun 19 Javascript
Node.js Event Loop各阶段讲解
Mar 08 Javascript
webpack4 optimization使用总结
Nov 10 #Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 #Javascript
node后端服务保活的实现
Nov 10 #Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
Nov 10 #Javascript
vue父子组件的通信方法(实例详解)
Nov 10 #Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 #Javascript
vue-父子组件和ref实例详解
Nov 10 #Javascript
You might like
与数据库连接
2006/10/09 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
Python实现把数字转换成中文
2015/06/29 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
如何对python的字典进行排序
2020/06/19 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
《夕阳真美》教学反思
2014/04/27 职场文书
检讨书范文
2015/01/27 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
html5实现点击弹出图片功能
2021/07/16 HTML / CSS