网络
my.request
小程序网络请求
基础库 1.11.0 以上才支持, 可以使用 my.canIUse('request') 做兼容性处理。详见 兼容接口说明
注意
支付宝端旧接口my.httpRequest将被废弃,请使用my.request
来代替。钉钉端目前尚未支持my.request
,请继续使用my.httpRequest。
重要:my.request
的请求头默认值为 {'content-type': 'application/json'},而不是{'content-type': 'application/x-www-form-urlencoded'}
入参
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
url | String | 是 | 目标服务器url |
headers | Object | 否 | 设置请求的 HTTP 头,默认 {'content-type': 'application/json'} |
method | String | 否 | 默认GET,目前支持GET/POST |
data | Object | 否 | 请求参数 |
timeout | Number | 否 | 超时时间,单位ms,默认30000 |
dataType | String | 否 | 期望返回的数据格式,默认json,支持json,text,base64 |
success | Function | 否 | 调用成功的回调函数 |
fail | Function | 否 | 调用失败的回调函数 |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
data参数说明
传给服务器的数据最终会是 String 类型,如果 data 不是 String 类型,会被转换成 String 。转换规则如下:
- 若方法为
GET
,会将数据转换成 query string: encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)… - 若方法为
POST
且headers['content-type']
为application/json
,会对数据进行 JSON 序列化 - 若方法为
POST
且headers['content-type']
为application/x-www-form-urlencoded
,会将数据转换成 query string: encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…
success返回值
名称 | 类型 | 描述 |
---|---|---|
data | String | 响应数据,格式取决于请求时的 dataType 参数 |
status | Number | 响应码 |
headers | Object | 响应头 |
错误码
error | 描述 |
---|---|
11 | 无权跨域 |
12 | 网络出错 |
13 | 超时 |
14 | 解码失败 |
19 | HTTP错误 |
20 | 请求已被停止/服务端限流 |
当入参dataType
值为json
时,小程序框架会先对返回结果做JSON.prase
操作,如果解析失败,则会返回error
为14的错误。当入参dataType
值为text
时,如果返回的内容格式不符,也会返回error
为14的错误。遇到此错误时,请先检查dataType
的设置是否正确。
返回值
RequestTask
网络请求任务对象
基础库 1.11.0 以上才支持, 可以使用 my.canIUse('request') 做兼容性处理。详见 兼容接口说明
方法
RequestTask.abort()
基础库 1.11.0 以上才支持, 可以使用 my.canIUse('request') 做兼容性处理。详见 兼容接口说明
代码示例
my.request({
url: 'https://httpbin.org/post',
method: 'POST',
data: {
from: '支付宝',
production: 'AlipayJSAPI',
},
dataType: 'json',
success: function(res) {
my.alert({content: 'success'});
},
fail: function(res) {
my.alert({content: 'fail'});
},
complete: function(res) {
my.hideLoading();
my.alert({content: 'complete'});
}
});
// 返回RequestTask,可以调用abort方法取消请求
const task = my.request({url: 'https://httpbin.org/post'})
task.abort()
注意:如果 request 调用返回「无权调用该接口」时,则需要在开放平台配置后台的 request 中添加你需要访问的域名地址(小程序详情 > 设置 > 开发设置 > httpRequest接口请求域名白名单):
my.uploadFile
暂不支持个人开发者使用
上传本地资源到开发者服务器。扫码体验:
入参
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
url | String | 是 | 开发者服务器地址 |
filePath | String | 是 | 要上传文件资源的本地定位符 |
fileName | String | 是 | 文件名,即对应的 key, 开发者在服务器端通过这个 key 可以获取到文件二进制内容 |
fileType | String | 是 | 文件类型,image / video / audio |
header | Object | 否 | HTTP 请求 Header |
formData | Object | 否 | HTTP 请求中其他额外的 form 数据 |
success | Function | 否 | 调用成功的回调函数 |
fail | Function | 否 | 调用失败的回调函数 |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
success 返回值
名称 | 类型 | 描述 |
---|---|---|
data | String | 服务器返回的数据 |
statusCode | String | HTTP 状态码 |
header | Object | 服务器返回的 header |
错误码
error | 描述 |
---|---|
11 | 文件不存在 |
12 | 上传文件失败 |
13 | 没有权限 |
代码示例
my.uploadFile({
url: '请使用自己服务器地址',
fileType: 'image',
fileName: 'file',
filePath: '...',
success: (res) => {
my.alert({
content: '上传成功'
});
},
});
my.downloadFile
暂不支持个人开发者使用
下载文件资源到本地。扫码体验:
入参
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
url | String | 是 | 下载文件地址 |
header | Object | 否 | HTTP 请求 Header |
success | Function | 否 | 调用成功的回调函数 |
fail | Function | 否 | 调用失败的回调函数 |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
success 返回值
名称 | 类型 | 描述 |
---|---|---|
apFilePath | String | 文件临时存放的位置 |
错误码
error | 描述 |
---|---|
12 | 下载失败 |
13 | 没有权限 |
代码示例
my.downloadFile({
url: 'http://img.alicdn.com/tfs/TB1x669SXXXXXbdaFXXXXXXXXXX-520-280.jpg',
success({ apFilePath }) {
my.previewImage({
urls: [apFilePath],
});
},
fail(res) {
my.alert({
content: res.errorMessage || res.error,
});
},
});
my.connectSocket
创建一个 WebSocket 的连接;一个支付宝小程序同时只能保留一个 WebSocket 连接,如果当前已存在 WebSocket 连接,会自动关闭该连接,并重新创建一个新的 WebSocket 连接。
扫码体验:
入参
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
url | String | 是 | 目标服务器url |
data | Object | 否 | 请求的参数 |
header | Object | 否 | 设置请求的头部 |
success | Function | 否 | 调用成功的回调函数 |
fail | Function | 否 | 调用失败的回调函数 |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
错误码
error | 描述 |
---|---|
1 | 未知错误 |
2 | 网络连接已经存在 |
3 | URL参数为空 |
4 | 无法识别的URL格式 |
5 | URL必须以ws或者wss开头 |
6 | 连接服务器超时 |
7 | 服务器返回的https证书无效 |
8 | 服务端返回协议头无效 |
9 | WebSocket请求没有指定Sec-WebSocket-Protocol请求头 |
10 | 网络连接没有打开,无法发送消息 |
11 | 消息发送失败 |
12 | 无法申请更多内存来读取网络数据 |
示例代码
my.connectSocket({
url: 'test.php',
data: {},
header:{
'content-type': 'application/json'
},
method:"GET",
});
my.onSocketOpen
监听WebSocket连接打开事件。
示例代码
my.connectSocket({
url: 'test.php',
});
my.onSocketOpen(function(res) {
console.log('WebSocket 连接已打开!');
});
my.offSocketOpen
取消监听WebSocket连接打开事件。
Page({
onLoad() {
this.callback = this.callback.bind(this);
my.onSocketOpen(this.callback);
},
onUnload() {
my.offSocketOpen(this.callback);
},
callback(res) {
},
})
my.onSocketError
监听WebSocket错误。
示例代码
my.connectSocket({
url: '开发者的服务器地址'
});
my.onSocketOpen(function(res){
console.log('WebSocket 连接已打开!');
});
my.onSocketError(function(res){
console.log('WebSocket 连接打开失败,请检查!');
});
my.offSocketError
取消监听WebSocket错误。
Page({
onLoad() {
this.callback = this.callback.bind(this);
my.onSocketError(this.callback);
},
onUnload() {
my.offSocketError(this.callback);
},
callback(res) {
},
})
my.sendSocketMessage
通过 WebSocket 连接发送数据,需要先使用 my.connectSocket 发起建连,并在 my.onSocketOpen 回调之后再发送数据。
入参
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
data | String/ArrayBuffer | 是 | 需要发送的内容:普通的文本内容 String 或者经 base64 编码后的 String |
isBuffer | Boolean | 否 | 如果需要发送二进制数据,需要将入参数据经 base64 编码成 String 后赋值 data ,同时将此字段设置为true,否则如果是普通的文本内容 String,不需要设置此字段 |
success | Function | 否 | 回调函数 |
fail | Function | 否 | 调用失败的回调函数 |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
示例代码
my.sendSocketMessage({
data: this.data.toSendMessage, // 需要发送的内容
success: (res) => {
my.alert({content: '数据发送!' + this.data.toSendMessage});
},
});
my.onSocketMessage
监听WebSocket接受到服务器的消息事件。
回调返回值
名称 | 类型 | 描述 |
---|---|---|
data | String/ArrayBuffer | 服务器返回的消息:普通的文本 String 或者经 base64 编码后的 String |
isBuffer | Boolean | 如果此字段值为true ,data 字段表示接收到的经过了 base64 编码后的 String,否则 data 字段表示接收到的普通 String 文本。 |
示例代码
my.connectSocket({
url: '服务器地址'
})
my.onSocketMessage(function(res) {
console.log('收到服务器内容:' + res.data)
})
my.offSocketMessage
取消监听WebSocket接受到服务器的消息事件。
my.closeSocket
入参
名称 | 类型 | 必填 | 描述 | 最低版本 |
---|---|---|---|---|
success | Function | 否 | 回调函数 | |
fail | Function | 否 | 调用失败的回调函数 | |
complete | Function | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
代码示例
关闭WebSocket连接。
my.onSocketOpen(function() {
my.closeSocket()
})
my.onSocketClose(function(res) {
console.log('WebSocket 已关闭!')
})
my.onSocketClose
代码示例
监听WebSocket关闭。
onLoad() {
// 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
my.onSocketClose((res) => {
my.alert({content: '连接已关闭!'});
this.setData({
sendMessageAbility: false,
closeLinkAbility: false,
});
});
// 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
my.onSocketOpen((res) => {
my.alert({content: '连接已打开!'});
this.setData({
sendMessageAbility: true,
closeLinkAbility: true,
});
});
my.onSocketError(function(res){
my.alert('WebSocket 连接打开失败,请检查!' + res);
});
// 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
my.onSocketMessage((res) => {
my.alert({content: '收到数据!' + JSON.stringify(res)});
});
}
connect_start() {
my.connectSocket({
url: '服务器地址', // 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名
success: (res) => {
my.showToast({
content: 'success', // 文字内容
});
},
fail:()=>{
my.showToast({
content: 'fail', // 文字内容
});
}
});
},
my.offSocketClose
取消监听WebSocket关闭。