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实现返回上一页面并刷新的小例子
Dec 11 Javascript
深入理解JSON数据源格式
Jan 10 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
Nov 04 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
深入理解jQuery 事件处理
Jun 14 Javascript
AngularJS实现动态编译添加到dom中的方法
Nov 04 Javascript
深入浅析Node.js单线程模型
Jul 10 Javascript
详解关于element级联选择器数据回显问题
Feb 20 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 Javascript
Vue自定义render统一项目组弹框功能
Jun 07 Javascript
手把手教你实现 Promise的使用方法
Sep 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+Html+缓存
2006/12/20 PHP
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
Python3使用requests发闪存的方法
2016/05/11 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
什么是继承
2013/12/07 面试题
出生公证委托书
2014/04/03 职场文书
求职导师推荐信范文
2015/03/27 职场文书
公司晚会主持词
2019/04/17 职场文书