vue项目中jsonp跨域获取qq音乐首页推荐问题


Posted in Javascript onMay 30, 2018

自己利用业余时间,为了更加数据vue和es6的特性,自学着和做了vue的移动端webapp项目。在项目中也是遇到了很多的问题。

接下来,先说一下怎么实现这个需求,然后再说我遇到的问题,以用来纠错。

第一步,再vue项目中引入 jsonp ,并进行 jsonp 的封装。

使用 npm 引入,输入:

npm install jsonp --save

安装好之后可以在自己的 package.json 文件中查看是否有此依赖。如下图所示:

vue项目中jsonp跨域获取qq音乐首页推荐问题 

如果有红框中显示的内容,说明安装成功,进入下一步封装:

import originJSONP from 'jsonp'  //引入jsonp
//进行封装并export
export default function jsonp(url,data,option) {
  url += (url.indexOf('?')<0? '?' : '&')+param(data)
 return new Promise((resolve,reject)=>{
 originJSONP(url,option,(err,data)=>{
  if(!err){
  resolve(data)
  }else{
  reject(err)
  }
 })
 })
}
//对data进行处理,并encodeURIComponent()进行转码。
function param(data) {
 let url = ''
 for(var k in data) {
  let value = data[k] !== undefined? data[k] : ''
  url += '&' + k + '=' + encodeURIComponent(value)
 }
 return url ? url.substring(1) : ''
}

封装完成 jsonp.js 文件之后,进入第二步:

在项目文件中配置需要的 api 。第一个 api ,命名为 config.js.

export const commonParams = {       //配置一些公共参数
 g_tk:5381,
 format: 'json',
 inCharset: 'utf-8',
 outCharset:'utf-8',
 notice: 0,
}
export const options = {           
 param: 'jsonpCallback'
}
export const ERR_OK = 0         //设置属性

然后再创建一个 recommend.js 的文件:

import jsonp from 'common/js/jsonp'          //引入jsonp
import {commonParams,options} from './config'    //引入config.js
export function getRecommend(){
   const url = 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg'
   const data = Object.assign({},commonParams,{     //es6的assign将commonParams和
    uin: 0,                      //之后的对象合并为一起,放在
    platform:'h5',                   //前面的{}之中。
    needNewCode: 1,
   })
   return jsonp(url,data,options)
}

其中的data最后的数据为:

vue项目中jsonp跨域获取qq音乐首页推荐问题 

然后,最后一步,就是在项目中所需要的.vue文件中去请求数据啦。

import {getRecommend} from 'api/recommend'    //引入recommend.js中的getRecomend方法
 import {ERR_OK} from 'api/config'        //引入recommend.js中的getRecomend方法
 import Slider from 'base/slider/slider'
 export default {
  data() {
   return{
   recommends : []
  }
 },
 created(){
    this._getRecommend()
  },
  methods:{
    _getRecommend() {               
    getRecommend().then((res)=>{
    if(res.code === ERR_OK){
    this.recommends = res.data.slider
   }
   })
   },
 }
}

如果在页面中浏览器返回以下图片所示的内容,就说明成功啦。

vue项目中jsonp跨域获取qq音乐首页推荐问题 

注意 : 在项目中遇到的坑

一:在请求数据的时候遇到以下截图所示的情况:

vue项目中jsonp跨域获取qq音乐首页推荐问题 

vue项目中jsonp跨域获取qq音乐首页推荐问题 

找原因找了好久,最后才发现是 encodeURIComponent() 这里出错了。注意不能写成

url += '&' + k + '=' + encodeURIComponent(value)

有可能不支持es6这样的语法。应该写成

for(var k in data) {
  let value = data[k] !== undefined? data[k] : ''
  url += '&' + k + '=' + encodeURIComponent(value)
 }

第二点:关于地址

const url = 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg'

不能写成

const url = 'https://m.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg'

好啦,就总结这么多啦。请求到数据之后,就是一些基本的DOM操作啦。

总结

以上所述是小编给大家介绍的vue项目中jsonp跨域获取qq音乐首页推荐问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Dom与浏览器兼容性说明
Oct 25 Javascript
JS获取浏览器版本及名称实现函数
Apr 02 Javascript
jquery 关于event.target使用的几点说明介绍
Apr 26 Javascript
js获取url参数值的两种方式
Sep 10 Javascript
给ListBox添加双击事件示例代码
Dec 02 Javascript
Javascript中构造函数要注意的一些坑
Jan 23 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
了解JavaScript表单操作和表单域
May 27 Javascript
JavaScript实现简单随机点名器
Nov 21 Javascript
JavaScript实现英语单词题库
Dec 24 Javascript
JavaScript实现切换多张图片
Jan 27 Javascript
Angular4 反向代理Details实践
May 30 #Javascript
使用vuex缓存数据并优化自己的vuex-cache
May 30 #Javascript
vue源码学习之Object.defineProperty 对数组监听
May 30 #Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 #Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 #Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
May 30 #Javascript
vue通过点击事件读取音频文件的方法
May 30 #Javascript
You might like
用PHP实现多级树型菜单
2006/10/09 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python的Django框架中的表单处理示例
2015/07/17 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
电子商务个人自荐信
2013/12/12 职场文书
上学迟到的检讨书
2014/01/11 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
暑假打工感想
2015/08/07 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang