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 相关文章推荐
jQuery ajax BUG:object doesn't support this property or method
Jul 06 Javascript
JavaScript中的作用域链和闭包
Jun 30 Javascript
Three.js源码阅读笔记(Object3D类)
Dec 27 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
AngularJS基础 ng-readonly 指令简单示例
Aug 02 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
vue中tab选项卡的实现思路
Nov 25 Javascript
js array数组对象操作方法汇总
Mar 18 Javascript
详解Nuxt.js 实战集锦
Nov 19 Javascript
React 实现车牌键盘的示例代码
Dec 20 Javascript
针对Vue路由history模式下Nginx后台配置操作
Oct 22 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中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
js跳转页面方法总结
2014/01/29 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
跟老齐学Python之Python安装
2014/09/12 Python
Python判断Abundant Number的方法
2015/06/15 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
Python3常用内置方法代码实例
2019/11/18 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
应届毕业生自荐信例文
2014/02/26 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
股权转让协议书
2014/12/07 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书