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实例分享---具有立体效果的图片特效
Jun 08 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
Nov 30 Javascript
JS全局变量和局部变量最新解析
Jun 24 Javascript
js a标签点击事件
Mar 30 Javascript
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
angularjs实现过滤并替换关键字小功能
Sep 19 Javascript
详解javascript appendChild()的完整功能
Aug 18 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
Oct 26 Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 Javascript
vue Element左侧无限级菜单实现
Jun 10 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 Javascript
vue实现同时设置多个倒计时
May 20 Vue.js
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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
使用VS开发 Node.js指南
2015/01/06 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
python下读取公私钥做加解密实例详解
2017/03/29 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
python numpy中cumsum的用法详解
2019/10/17 Python
python实现智能语音天气预报
2019/12/02 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
Final类有什么特点
2012/04/25 面试题
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
测控技术自荐信
2014/06/05 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
银行实习推荐信
2015/03/27 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL