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 动态创建表格
Jan 08 Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
基于jQuery日历插件制作日历
Mar 11 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
JavaScript实现shuffle数组洗牌操作示例
Jan 03 Javascript
JS实现的全选、全不选及反选功能【案例】
Feb 19 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
Mar 28 Javascript
详解如何在JS代码中消灭for循环
Dec 11 Javascript
使用原生javascript开发计算器实例代码
Feb 21 Javascript
介绍一下28个JS常用数组方法
May 06 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 return语句另类用法不止是在函数中
2014/09/17 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
js中less常用的方法小结
2017/08/09 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
Python MD5文件生成码
2009/01/12 Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python中类的属性和方法介绍
2018/11/27 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
详解python编译器和解释器的区别
2019/06/24 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
Python编写单元测试代码实例
2020/09/10 Python
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
后勤人员岗位职责
2013/12/17 职场文书
竞选班委演讲稿
2014/04/28 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2015年维修工作总结
2015/04/25 职场文书
python标准库ElementTree处理xml
2022/05/20 Python
Nginx如何配置根据路径转发详解
2022/07/23 Servers