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的朋友可以看下)
Jul 22 Javascript
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 Javascript
JavaScript 程序编码规范
Nov 23 Javascript
EasyUI中的tree用法介绍
Nov 01 Javascript
javascript 数组操作详解
Jan 29 Javascript
JavaScript实现复制内容到粘贴板代码
Mar 31 Javascript
动态加载JavaScript文件的两种方法
Apr 22 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 Javascript
Bootstrap table 服务器端分页功能实现方法示例
Jun 01 Javascript
Element Card 卡片的具体使用
Jul 26 Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 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和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
两个Javascript小tip资料
2010/11/23 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
js表单验证实例讲解
2016/03/31 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
python如何爬取网页中的文字
2020/07/28 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
工地资料员岗位职责
2013/12/31 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
企业年会主持词
2014/03/27 职场文书
安全承诺书格式
2014/05/21 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
python字符串常规操作大全
2021/05/02 Python