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 陷阱 window全局对象
Nov 26 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
Nov 10 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
微信小程序如何实现全局重新加载
Jun 05 Javascript
JavaScript实现随机五位数验证码
Sep 27 Javascript
使用next.js开发网址缩短服务的方法
Jun 17 Javascript
Element Carousel 走马灯的具体实现
Jul 26 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
Nov 02 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实现的功能是显示8条基色色带
2006/10/09 PHP
php模板之Phpbean的目录结构
2008/01/10 PHP
php购物车实现代码
2011/10/10 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
PDO::getAttribute讲解
2019/01/28 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
JS中Iframe之间传值的方法
2013/03/11 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python实现的Kmeans++算法实例
2014/04/26 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
python中pika模块问题的深入探究
2018/10/13 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
《最后的姿势》教学反思
2014/02/27 职场文书
校园环保标语
2014/06/13 职场文书
小学校长开学致辞
2015/07/29 职场文书
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫