该用户很懒,什么都没说哦~|

雨宮莲

园龄:1年9个月粉丝:3关注:1

📂网络
🔖HTTP
2023-05-19 16:03阅读: 1242评论: 0推荐: 0

uni.request()相关问题

一、uni-app前端post请求数据json序列化

1. 前置须知

Content-Type 实体头部用于指示资源的 MIME(媒体) 类型 media type

  • 在请求中 ,客户端告诉服务器实际发送的数据类型。
  • 在响应中,Content-Type 标头告诉客户端实际返回的内容的内容类型。

2. uni.request({})

官方文档

2.0 基本封装

const baseUrl = 'http://localhost:8003'
export function request(url, params, method, header, complete) {
return new Promise((resolve, reject) => {
uni.request({
url: `${baseURL}${url}`,
data: params,
dataType: 'json',
method: method,
header: header,
success: (res) => {
if (res.statusCode === 200) {
// 可在分业务逻辑 res.data.code
resolve(res.data); // { code:1,data:{},msg:'成功' }
} else {
if (res.errMsg) {
uni.showToast({
title: res.errMsg,
icon: 'none'
});
}
reject(res)
console.err(res)
}
},
fail: (err) => {
uni.showToast({
title: '网络不稳定请重试!',
icon: 'none'
});
reject(err)
console.err(err)
},
complete: () => {
complete();
}
});
})
}
// 接口
export function getList (data,complete) {
return request(`/api/xxx/xxx/${data.pageNumber}/${data.pageSize}`,data,'POST', {'content-type': 'application/json'}, complete)
}
// 调用
const params = {}
getList(params,()=>{}).then(
res=> {
this.xxxList = res.data
}
)

2.1 data请求参数说明

对于 GET 方法,会将数据转换为 query string。例如 { name: 'name', age: 18 } 转换后的结果是 name=name&age=18
对于 POST 方法且 header['content-type']application/x-www-form-urlencoded 的数据,会将数据转换为 query string。
对于 POST 方法且 header['content-type']application/json 的数据,会进行 JSON 序列化,默认。

这也就是为什么,前端设置请求体类型为json、后台@RequestBody JSONObject json接收参数,发送请求时参数是 Object 却不需要手动通过JSON.stringify(data)序列化,请求不会报错;dataType: 'json', //服务器返回json格式数据,如果设为 json(默认),会对返回的数据进行一次 JSON.parse,非 json 不会进行 JSON.parse。

2.2 success返回参数说明

“成功接收数据”进入success回调,res参数接收,res对象的结构:

参数 类型 说明
data Object/String/ArrayBuffer 开发者服务器返回的数据
statusCode Number 开发者服务器返回的 HTTP 状态码
header Object 开发者服务器返回的 HTTP Response Header
cookies Array.<string> 开发者服务器返回的 cookies,格式为字符串数组



二、uni.request的success回调问题

参数 类型 说明
success Function 收到开发者服务器成功返回的回调函数
fail Function 接口调用失败的回调函数

此处的 success 是只要接收到服务器的返回就算成功,不管返回的 HTTP 状态码是不是2xx;
所以,正常使用这个 uni.request 的时候,需要手动地去根据返回的 HTTP 状态码(res.statusCode),来判断是 resolve 还是 reject。

本文作者:雨宮莲

本文链接:https://www.cnblogs.com/pupyy/p/17415030.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   雨宮莲  阅读(1242)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起