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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步