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客户端快捷键管理类的较完整实现和应用
Jun 08 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
JS阻止用户多次提交示例代码
Mar 26 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
Mar 02 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
May 18 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
微信小程序 网络通信实现详解
Jul 23 Javascript
js定义类的方法示例【ES5与ES6】
Jul 30 Javascript
微信小程序实现左侧滑动导航栏
Apr 08 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 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
php实现快速排序的三种方法分享
2014/03/12 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
jQuery 动画基础教程
2008/12/25 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
vue实现循环切换动画
2018/10/17 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
综合内勤岗位职责
2014/04/14 职场文书
会计求职信范文
2014/05/24 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
人工作失职检讨书
2015/05/05 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis
JAVA springCloud项目搭建流程
2022/05/11 Java/Android