ajax获取qq音乐源码,jsonp的运用(获取qq音乐首页数据)以及用Promise的封装

本文介绍了JSONP(JSON with Padding)的工作原理,由于AJAX的同源策略限制,开发者利用script标签的src属性实现跨域数据请求。JSONP通过动态生成JS文件并指定回调函数来包裹JSON数据,从而在客户端方便地使用数据。文中提供了一个简单的JSONP封装示例,并展示了如何在Vue应用中使用该封装方法获取QQ音乐的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是jsonp呢?

首先,因为ajax无法跨域,然后开发者就有所思考

其次,开发者发现, 标签的src属性是可以跨域的

把跨域服务器写成 调用本地的函数 ,回调数据回来不就好了?

json刚好被js支持(object)

调用跨域服务器上动态生成的js格式文件(不管是什么类型的地址,最终生成的返回值都是一段js代码)

这种获取远程数据的方式看起来非常像ajax,但其实并不一样

便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP。

传递一个callback参数给跨域服务端,然后跨域服务端返回数据时会将这个callback参数作为函数名来包裹住json数据即可。

Installation

$ npm install jsonp

API

jsonp(url, opts, fn) //具体的url是访问地址, opts是配置, fn是回调

配置一般不写, 而回调有两个参数err, data 具体请看代码(应用场景vue)

import originJSONP from 'jsonp'

//封装一个jsonp的常规方法,参数分别是 url地址,data数据,option配置

export default function jsonp(url, data, option) {

//利用下面的函数 生成原生`jsonp`想要的url

//如果url末尾没有 ? 就加上 如果有就加连接符&

let url += ('?'.indexOf(url) < 0 ? '?' : '&') + prama(data)

originJSONP(url, option, (err, data) => { //返回一个promise对象封装

return new Promise((resolve, reject) => {

if(!err) {

resolve(data)

}else {

reject(err)

}

})

})

}

//将data拼接到url里

function prama(data) {

let url = ''

for(let k in data) {

//解决传输数据里有undefiend的问题

let value = data[k] !== undefined ? data[k] : ''

//拼接 注意value需要用这个函数解码

url += `&$(k)=$(encodeURIComponent(value))`

return url ? url.subString(1) : '' //去掉第一个 “&”符号

}

}

再来个上面的截图

2aed6e816773

jsonp.js

接下来, 我们假设访问的一个qq音乐的网站 想获取它的数据

需要一下参数,把固定的写到config.js里

2aed6e816773

config.js

再就可以将接口的方法写在一个文件里

2aed6e816773

recommend.js

于是我们就可以在recommend.vue调用这个接口了

2aed6e816773

image.png

可以打印出qq音乐首页的所有数据了! 大功告成~

谢谢观看~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值