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 相关文章推荐
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
js实现图片拖动改变顺序附图
May 13 Javascript
IE6浏览器中window.location.href无效的解决方法
Nov 20 Javascript
vue中如何实现pdf文件预览的方法
Jul 12 Javascript
彻底揭秘keep-alive原理(小结)
May 05 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
微信小程序实现签字功能
Dec 23 Javascript
使用node.JS中的url模块解析URL信息
Feb 06 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 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
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php实现Mysql简易操作类
2015/10/11 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
xml和web特殊字符
2009/04/28 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
使用Python从零开始撸一个区块链
2018/03/14 Python
用pycharm开发django项目示例代码
2018/10/24 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
大学生文员专业个人求职信范文
2014/01/05 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
亮剑观后感300字
2015/06/05 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
微信小程序调用python模型
2022/04/21 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers