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 相关文章推荐
ASP中进行HTML数据及JS数据编码函数
Nov 11 Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
原生JS实现几个常用DOM操作API实例
Jan 19 Javascript
node.js中debug模块的简单介绍与使用
Apr 25 Javascript
浅谈关于axios和session的一些事
Jul 13 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
Apr 04 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
elementUI select组件使用及注意事项详解
May 29 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 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
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
深入理解vue Render函数
2017/07/19 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
python 图片验证码代码
2008/12/07 Python
Python封装shell命令实例分析
2015/05/05 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
python+logging+yaml实现日志分割
2019/07/22 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
Python hashlib模块的使用示例
2020/10/09 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
建筑安全员岗位职责
2014/03/13 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
十月围城观后感
2015/06/08 职场文书
退休教师追悼词
2015/06/23 职场文书
食堂卫生管理制度
2015/08/04 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python