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 相关文章推荐
在html页面中包含共享页面的方法
Oct 24 Javascript
来自国外的页面JavaScript文件优化
Dec 08 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
Mar 04 Javascript
js实现京东轮播图效果
Jun 30 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
vue 挂载路由到头部导航的方法
Nov 13 Javascript
基于JavaScript获取base64图片大小
Oct 18 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 Javascript
Angular处理未可知异常错误的方法详解
Jan 17 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
PHP的拦截器实例分析
2014/11/03 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
PHP中list方法用法示例
2016/12/01 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
浅析vue深复制
2018/01/29 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
端午节演讲稿
2014/05/23 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
生日寿星公答谢词
2015/09/29 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
公证书
2019/04/17 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript