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 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
Aug 01 Javascript
jQuery实现tag便签去重效果的方法
Jan 20 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
AngularJs表单验证实例代码解析
Nov 29 Javascript
Vue.js第四天学习笔记
Dec 02 Javascript
JS实现加载时锁定HTML页面元素的方法
Jun 24 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 Javascript
原生JS实现微信通讯录
Jun 18 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下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
php验证码实现代码(3种)
2015/09/07 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
浅谈Python处理PDF的方法
2017/11/10 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python语言是免费还是收费的?
2020/06/15 Python
印尼购物网站:iLOTTE
2019/10/16 全球购物
交通法规咨询中心工作职责
2013/11/27 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
小学数学课后反思
2014/04/23 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
检讨书范文500字
2015/01/28 职场文书
教师节慰问信
2015/02/15 职场文书
公司奖励通知
2015/04/21 职场文书
亮剑观后感500字
2015/06/05 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
Python移位密码、仿射变换解密实例代码
2021/06/27 Python