my.setstorage(object object)
支小宝客户端 支持
安诊儿客户端 支持
小程序开发者工具: 支持。
主体: 企业支付宝小程序 、 个人支付宝小程序
保存数据到本地缓存。
该 key 原来对应的内容会被覆盖。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 200kb,所有数据存储上限为 10mb。
相关接口
- 本地缓存数据使用 my.setstorage 按 key 存储,使用 my.getstorage 按 key 读取;
- 可使用 my.getstorageinfo 获取已存储的所有 key 以及总体空间占用情况;
- 可使用 my.removestorage 删除指定 key 对应数据,使用 my.clearstorage 删除所有缓存数据;
- 本地缓存数据相关的 api 均提供带 sync 后缀的同步版本,但通常推荐使用异步版本,以免影响页面加载和交互响应速度。
数据隔离
- 本地缓存数据按支付宝账号和小程序 appid 两个维度隔离:同一设备上,不同账号的数据互相隔离,同一账号在不同小程序里的数据互相隔离;
- web-view 组件内页面用 my.setstorage/my.getstorage 存取的数据与包含它的小程序隔离;
- 插件本地缓存数据与宿主小程序隔离。
数据清除
- 用户卸载支付宝客户端,所有小程序本地缓存数据会被一并清除;
- 用户在我“我的小程序”中删除小程序,被删除小程序的本地缓存数据会被清除;
- 不会清除数据的情况:退出小程序或支付宝、在支付宝的设置界面清除缓存、覆盖安装(不是先删除再安装)支付宝。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 描述 |
---|---|---|---|---|
data | unknown | - | 是 | 存储的数据。data 可以是任意类型 |
key | string | - | 是 | 存储的 key,不接受空字符串 |
success | function | - | 否 | 调用成功的回调函数 |
fail | function | - | 否 | 调用失败的回调函数 |
complete | function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
data 参数说明
- 单个 key 允许存储的最大数据大小为 200kb
- 所有数据存储上限为 10mb。
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
2 | 必填参数为空。 |
请确保入参 key 或 data 类型正确且不为空。 |
12 | 存储总大小达到上限。 |
单个小程序数据存储上限为 10mb。可以通过 my.removestorage 及时移除不再需要的数据。 |
14 | data长度超限 |
单个 key 允许存储的最大数据大小为 200kb,可以减少 data 长度或拆分成多个 key 进行存储 |
my.setstorage({
key: 'currentcity',
data: {
cityname: '杭州',
adcode: '330100',
spell: 'hangzhou',
},
success: (res) => {
my.alert({ title: "setstorage success" });
},
fail: (error) => {
console.error('setstorage failed: ', json.stringify(error));
},
});
q:支付宝小程序里 my.setstorage 是否支持 encrypt 入参?
支付宝小程序的本地缓存数据默认加密存储,不支持/不需要 encrypt 参数。
q:小程序数据到达 10mb 后继续写入数据会怎样?
超过 10mb 后无法继续写入,会触发 fail 回调(错误码 12)。建议通过 my.removestorage 及时移除不再需要的数据。
q:小程序的 my.setstorage 和 h5 本地存储 localstorage 有何差异?
h5 的 localstorage 只能存储 string,小程的 my.setstorage 支持 string,也支持 object(内部会自动做 json 序列化)。
q:web-view 组件里 h5 是否可以调用 my.setstorage?
在 web-view 组件里 h5 引入 https://appx/web-view.min.js 后,可以调用 my.setstorage/my.getstorage,但请注意,它们操作的是 web-view 内的数据,与小程序数据并不相通。web-view 里想要利用小程序的数据,必须通过 my.postmessage/my.onmessage 与小程序通信。