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 相关文章推荐
Javascript 生成指定范围数值随机数
Jan 09 Javascript
jQuery 事件队列调整方法
Sep 18 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
JavaScript中number转换成string介绍
Dec 31 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
JS装饰器函数用法总结
Apr 21 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
Echarts实现单条折线可拖拽效果
Dec 19 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
世界收音机发展史
2021/03/01 无线电
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
html读出文本文件内容
2007/01/22 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
python处理cookie详解
2014/02/07 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
任意存:BOXFUL
2018/05/21 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
汽车驾驶求职信
2013/10/25 职场文书
年终考核评语
2014/01/19 职场文书
会务接待方案
2014/02/27 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python