====== 6.API 接口 ======
[[https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html|微信开放文档API]]
===== -#1 类型 =====
==== - 事件监听 API ====
以 on 开头的 API 用来监听某个事件是否触发,如:wx.onSocketOpen,wx.onCompassChange 等。
接受一个回调函数作为参数,当事件触发时会调用这个回调函数,并将相关数据以参数形式传入。
wx.onCompassChange(function (res) {
console.log(res.direction)
})
==== - 同步 API ====
以 Sync 结尾的 API 都是同步 API, 如 wx.setStorageSync,wx.getSystemInfoSync 等。
同步 API 的执行结果可以通过函数返回值直接获取,如果执行出错会抛出异常。
try {
wx.setStorageSync('key', 'value')
} catch (e) {
console.error(e)
}
==== - 异步 API ====
大多数 API 都是异步 API,如 wx.request,wx.login 等。这类 API 接口通常都接受一个 Object 类型的参数。
[[https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/api.html#API|Object 参数说明]]
[[https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/api.html#API|回调函数的参数]]
success,fail,complete 函数调用时会传入一个 Object 类型参数
==== - 异步API返回Promise ====
异步 API 支持 callback & promise 两种调用方式。
// callback 形式调用
wx.chooseImage({
success(res) {
console.log('res:', res)
}
})
// promise 形式调用
wx.chooseImage().then(res => console.log('res: ', res))
===== API发起请求 wx.request =====
在小程序/小游戏中使用网络相关的 API 时,需要注意下列问题: \\
* 每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信。
* 服务器域名请在 「小程序后台-开发-开发设置-服务器域名」 中进行配置。
* 域名只支持 https,不能使用 IP 地址,可以配置端口。
* 域名必须经过 ICP 备案。
* api.weixin.qq.com 不能被配置为服务器域名,相关API也不能在小程序内调用。通过服务器使用 getAccessToken 接口获取 access_token,并调用相关 API;
* 超时时间可以在 app.json 或 game.json 中通过 networktimeout 配置。
wx.request({
url: 'test.php', //仅为示例,并非真实的接口地址
data: {
x: '' ,
y: ''
},
header:{
"Content-Type":"application/json" //返回的数据是什么类型
},
success: function(res) {
console.log(res.data)
}
})
requestTask.abort() // 取消请求任务
OBJECT参数说明 \\
^ 参数名 | 类型 ^ 必填 | 说明 |
| url | String | 是 | 开发者服务器接口地址 |
| data | data | | 请求的参数 |
| success | Function | | 收到开发者服务成功返回的回调函数,res = {data: '开发者服务器返回的内容'} |
| complete | Function | | 接口调用结束的回调函数(调用成功、失败都会执行) |
success返回参数说明 \\
^ 参数名 | 类型 ^ 说明 ^
| data | Object/String/ArrayBuffer | 开发者服务器返回的数据 |
| statusCode | Number | 开发者服务器返回的 HTTP 状态码 |
| header | Object | 开发者服务器返回的 HTTP Response Header |
==== 以天气api为例 ====
[[https://www.jianshu.com/p/63585bdbdbc2|如何将接口获取到的数据展示到微信小程序上]] \\
//获取数据
wx.request({
url: '******', //这里填写你的接口路径
header: { //这里写你借口返回的数据是什么类型,这里就体现了微信小程序的强大,直接给你解析数据,再也不用去寻找各种方法去解析json,xml等数据了
'Content-Type': 'application/json'
},
data: {//这里写你要请求的参数
x: '' ,
y: ''
},
success: function(res) {
//这里就是请求成功后,进行一些函数操作
console.log(res.data)
}
})
// js文件
onLoad: function () {
var that = this//不要漏了这句,很重要
wx.request({
url: 'https://www.apiopen.top/weatherApi?city=成都',
headers: {
'Content-Type': 'application/json'
},
success: function (res) {
that.setData({
date: res.data.data.forecast[0].date,
fengxiang: res.data.data.forecast[0].fengxiang,
type: res.data.data.forecast[0].type
//res代表success函数的事件对,data是固定的,fengxiang是是上面json数据中fengxiang
})
}
})
}
//wxml文件
{{date}}
{{fengxiang}}
{{type}}
==== 封装公共参数 ====
[[https://www.jianshu.com/p/c732123feadd|小程序封装wx.request]]
===== wx.setStorageSync =====
* 参数 string key 本地缓存中指定的 key
* any data 需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。
try {
wx.setStorageSync('key', 'value')
} catch (e) { }
使用场景
小程序在获取用户授权后,获取用户的昵称和头像且会从数据库查询两个值显示到首页页面。
已经取得授权的情况下刷新,可以不弹框直接获取昵称和头像。此时也需要将数据库中的值显示到首页页面。
显然,再次向后台发出请求,获取数据库中的值是无法实现的。因为在页面显示的变量名是固定的,两次请求返回的值赋给同一个变量无法实现,且网络请求的先后顺序也不能确定。
使用
此种情况,就需要将首次查询(点击授权按钮)的值存入到本地缓存中,
当再次刷新时,将缓存中的值显示到页面上。
[[https://blog.csdn.net/java13245/article/details/103639697|微信小程序:数据缓存及使用(wx.setStorageSync(string key, any data), wx.getStorageSync(string key))]]
===== wx.getStorageSync =====
从本地缓存中获取指定 key 的内容,wx.getStorage 的同步版本 [[https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageSync.html|any wx.getStorageSync(string key)]]
* 参数 string key 本地缓存中指定的 key
* 返回值 any data key对应的内容
try {
var value = wx.getStorageSync('key')
if (value) {
// Do something with return value
}
} catch (e) {
// Do something when catch error
}
===== 媒体 =====
===== 文件 =====
===== 数据 =====
===== 位置 =====
===== 设备 =====