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 相关文章推荐
javascript jQuery $.post $.ajax用法
Jul 09 Javascript
Jquery下判断Id是否存在的代码
Jan 06 Javascript
js控制frameSet示例
Sep 10 Javascript
js判断客户端是iOS还是Android等移动终端的方法
Dec 11 Javascript
在JavaScript中对HTML进行反转义详解
May 18 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
js 动态生成json对象、时时更新json对象的方法
Dec 02 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
three.js中文文档学习之通过模块导入
Nov 20 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
Feb 23 Javascript
Vue实现兄弟组件间的联动效果
Jan 21 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
跟我学Laravel之安装Laravel
2014/10/15 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python基础入门之seed()方法的使用
2015/05/15 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
数据库面试要点基本概念
2013/10/31 面试题
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
优秀员工自荐书
2013/12/19 职场文书
通用求职信范文模板分享
2013/12/27 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
《匆匆》教学反思
2014/02/22 职场文书
科研课题实施方案
2014/03/18 职场文书
股指期货心得体会
2014/09/13 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
关于观后感的作文
2015/06/18 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
怎么用Python识别手势数字
2021/06/07 Python