uniapp之请求同一个接口app端和h5端返回数据不一样(ap
2019-08-22 本文已影响3人
瑟闻风倾
test:function(){
uni.request({
url: "http://**.**.com:8888/user/login",
method: "POST",
header: {
"content-type": "application/x-www-form-urlencoded"
},
data: {
mobile : "15639150623",
password : "ly250"
},
success(res) {
console.log("test-login:" + JSON.stringify(res));
},
fail(res) {},
complete() {}
});
},
(1) h5端正常
{
"data": {
"code": "0",
"msg": "success",
"data": {
"token": "WnbR5-xzSfLiNpNj",
"userInfo": {
"user_id": "10",
"center_id": "1",
"dept_id": "1",
"name": "liy",
"mobile": "15639150623",
"password": "8f8fc1b88358d0db495f1a87dc41e13d",
"is_admin": "0",
"status": "1",
"add_time": "1565230771",
"last_login_time": "1566380685",
"last_login_ip": "112.16.93.24"
}
}
},
"statusCode": 200,
"header": {
"pragma": "no-cache",
"content-type": "application/json; charset=Array;",
"cache-control": "no-store, no-cache, must-revalidate",
"expires": "Thu, 19 Nov 1981 08:52:00 GMT"
},
"errMsg": "request:ok"
}

(2) app端请求不到业务数据
{
"data": "200 OK",
"statusCode": 200,
"header": {
"Cache-Control ": "no-store, no-cache, must-revalidate",
"Pragma ": "no-cache",
"Expires ": "Thu, 19 Nov 1981 08:52:00 GMT",
"X-Powered-By ": "PHP/7.1.16",
"X-Android-Response-Source ": "NETWORK 200",
"Connection ": "keep-alive",
"Access-Control-Allow-Headers ": "x-requested-with, content-type",
"X-Android-Sent-Millis ": "1566434712638",
"Content-Type ": "application/json; charset=Array;",
"Date ": "Thu, 22 Aug 2019 00:45:13 GMT",
"Server ": "nginx/1.14.0",
"Transfer-Encoding ": "chunked",
"X-Android-Received-Millis ": "1566434712659",
"Access-Control-Allow-Origin ": "*"
},
"errMsg": "request:ok"
}
问题
:app端请求的业务数据data一直为“200 OK”,但h5端可以请求到业务数据。
分析
:应该是响应头的问题。
(1) 猜想1:前端发送数据的 "编码方式" 与后台接收数据的 "解码方式" 不同。这里说的编码与解码对应的是请求头 header 中的 Content-Type 字段。
-
已知当前开发环境HBuilderX字符集为UTF-8:在开发环境右下角查看
image.png
- 后台需修改响应头的字符集为UTF-8(问题解决):
错误格式.png
错误格式:中间分号后面多加了空格,最后面多加了分号。
正确格式.png
正确格式:"content-type": "application/json;charset=UTF-8",
总结
:h5端正常解析,但是app端数据解析异常,可能原因是不同语言对header解析不一样(有些语言是弱语言,兼容性没有那个大)。