第一种 ajax请求方式
uni.request(OBJECT)
参数名 | 类型 | 必填 | 默认值 | 说明 | 平台差异说明 |
---|---|---|---|---|---|
url | String | 是 | 开发者服务器接口地址 | ||
data | Object/String/ArrayBuffer | 否 | 请求的参数 | App(自定义组件编译模式)不支持ArrayBuffer类型 | |
header | Object | 否 | 设置请求的 header,header 中不能设置 Referer。 | ||
method | String | 否 | GET | 有效值详见下方说明 | |
timeout | Number | 否 | 30000 | 超时时间,单位 ms | 支付宝小程序 |
dataType | String | 否 | json | 如果设为 json,会尝试对返回的数据做一次 JSON.parse | |
responseType | String | 否 | text | 设置响应的数据类型。合法值:text、arraybuffer | App和支付宝小程序不支持 |
sslVerify | Boolean | 否 | true | 验证 ssl 证书 | 仅App安卓端支持(HBuilderX 2.3.3+) |
success | Function | 否 | 收到开发者服务成功返回的回调函数 | ||
fail | Function | 否 | 接口调用失败的回调函数 | ||
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
/*
我们可以通过简单的分装类实现请求方式
@params method 请求方式 默认 post
@params url 请求地址 默认 post
@params data 请求参数
@return 返回一个promise对象
*/
export const ajax= (method = 'post', url, data = {}) => new Promise((resolve) => {
/* 在这里我们可以做一些拦截处理
比如 验证 token 全局参数等等
*/
let options = {};
/* 发起请求 */
uni.request({
method,
success: (res) => {
/* 这里可以做一些后台结果的数据校验 */
resolve(res)
},
fail: ({
errMsg
}) => resolve(fail(errMsg)),
...options
})
})
第二种 : 文件上传 ajax 可以实现单图上传和多图上传
uni.uploadFile(OBJECT)
将本地资源上传到开发者服务器,客户端发起一个 POST
请求,其中 content-type
为 multipart/form-data
。
如页面通过 uni.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口将本地资源上传到指定服务器。另外选择和上传非图像、视频文件参考:https://ask.dcloud.net.cn/article/35547。
在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
OBJECT 参数说明
参数名 | 类型 | 必填 | 说明 | 平台差异说明 |
---|---|---|---|---|
url | String | 是 | 开发者服务器 url | |
files | Array | 否 | 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。 | 5+App |
fileType | String | 见平台差异说明 | 文件类型,image/video/audio | 仅支付宝小程序,且必填。 |
filePath | String | 是 | 要上传文件资源的路径。 | |
name | String | 是 | 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 | |
header | Object | 否 | HTTP 请求 Header, header 中不能设置 Referer。 | |
formData | Object | 否 | HTTP 请求中其他额外的 form data | |
success | Function | 否 | 接口调用成功的回调函数 | |
fail | Function | 否 | 接口调用失败的回调函数 | |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
/*
fromData 多文件提交
@params url 请求的地址
@params data 请求所带参数
*/
export const submitFormdata = (url, data = null) => new Promise((resolve) => {
/* 规定上传文件的键值做参数处理 */
// 比如
// data = {
// files : [],
// ...params,
// }
/* 把对应的数据处理归位 */
/* 这里有个要注意
虽然 填写了 files uniapp不会去拿 name 和filePath
但 uploadFile 的 name 和 filePath 必填 不然会报错
*/
let files = [];
for (let key in data.files) {
files.push({
name: key,
uri: data.files[key]
});
}
delete data.files;
options.formData = data;
options.files = files;
uni.uploadFile({
success: ({
statusCode,
data
}) => resolve(success(statusCode, data)),
fail: ({
errMsg
}) => resolve(fail(errMsg)),
filePath: '',
name: '',
...options
})
})
/*
formdata 单文件上传
@params filePath 上传文件的参数判读
@params url 上传URL地址
*/
export const uploadFile = (fileConfig = {filePath: '',fileName : file}, url = config.upload_url) => new Promise((resolve) => {
/* 提交校验参数判读 */
options.filePath = fileConfig.filePath;
options.name = fileConfig.fileName;;
uni.uploadFile({
success: ({
statusCode,
data
}) => resolve(success(statusCode, data)),
fail: ({
errMsg
}) => resolve(fail(errMsg)),
...options
})
})