小程序
小游戏
企业微信
微信支付
扫描小程序码分享
调用wx.request接口后,服务器返回HTTP状态码401,本来希望小程序中掉起fail回电函数,但是掉起的是success。请问success和fail是怎么界定的?
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
返回的数据是什么
401时,服务器返回的数据是我自己定义的错误信息
我猜想 wx.request 的 success 和 fail 本意是用来区分网络层的成功与失败,比如连接超时、传输中断。这样的话,401、500 之类被归为 success 似乎也说得通,因为它至少在 HTTP request/response 层面是完整的。但无论如何这种处理方式的确有点反直觉,也许只是一个 BUG 吧……我个人的习惯是,服务器端程序在正常的响应中加入自己的 success 标志,而小程序端不使用 success 和 fail,只使用 complete,只有在 'request:ok' 并且自己的 success 标志置位的情况下,才认为“成功”,否则认为“失败”。
我猜想 wx.request 的 success 和 fail 本意是用来区分网络层的成功与失败,比如连接超时、传输中断。这样的话,401、500 之类被归为 success 似乎也说得通,因为它至少在 HTTP request/response 层面是完整的。
但无论如何这种处理方式的确有点反直觉,也许只是一个 BUG 吧……
我个人的习惯是,服务器端程序在正常的响应中加入自己的 success 标志,而小程序端不使用 success 和 fail,只使用 complete,只有在 'request:ok' 并且自己的 success 标志置位的情况下,才认为“成功”,否则认为“失败”。
哈哈,你的分析很到位哇。最近在摸索小程序开发,能否交流一下?
如果request是桥梁的话,那么把结果从服务器端转交给客户端时,应该保证状态传递的一致性。如果服务器端已经告知这个处理结果是不成功的,那么客户端看到的结果也应该是不成功的。
如果request的定位是跟HTTP同属一个网络层级,success||fail和HTTP状态码对等,那么,如果服务器端我们是通过HTTP状态码来定性结论的,而到了客户端中又无法根据success||fail来定性结论,这是不对等的。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
顺便附上我的对 wx.request 包装的代码:
App({
request:
function
(data, finish) {
var
params = {
url:
'https://xxx.com/index.php'
,
data: data,
complete:
(res) {
if
(
typeof
finish !=
'function'
)
return
;
(res.errMsg !=
'request:ok'
||
res.data !=
'object'
|| !res.data.success) {
finish(
false
, res);
}
true
, res.data.result);
wx.request(params);
},
这样的话,所有原来需要调用 wx.request 的地方都改成 app.request 就好了,类似下面这样:
app = getApp();
app.request({...},
(success, result) {
// ...
});
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
401时,服务器返回的数据是我自己定义的错误信息
哈哈,你的分析很到位哇。最近在摸索小程序开发,能否交流一下?
如果request是桥梁的话,那么把结果从服务器端转交给客户端时,应该保证状态传递的一致性。如果服务器端已经告知这个处理结果是不成功的,那么客户端看到的结果也应该是不成功的。
如果request的定位是跟HTTP同属一个网络层级,success||fail和HTTP状态码对等,那么,如果服务器端我们是通过HTTP状态码来定性结论的,而到了客户端中又无法根据success||fail来定性结论,这是不对等的。
顺便附上我的对 wx.request 包装的代码:
App({
request:
function
(data, finish) {
var
params = {
url:
'https://xxx.com/index.php'
,
data: data,
complete:
function
(res) {
if
(
typeof
finish !=
'function'
)
return
;
if
(res.errMsg !=
'request:ok'
||
typeof
res.data !=
'object'
|| !res.data.success) {
finish(
false
, res);
return
;
}
finish(
true
, res.data.result);
}
}
wx.request(params);
},
这样的话,所有原来需要调用 wx.request 的地方都改成 app.request 就好了,类似下面这样:
var
app = getApp();
app.request({...},
function
(success, result) {
// ...
});
我猜想 wx.request 的 success 和 fail 本意是用来区分网络层的成功与失败,比如连接超时、传输中断。这样的话,401、500 之类被归为 success 似乎也说得通,因为它至少在 HTTP request/response 层面是完整的。
但无论如何这种处理方式的确有点反直觉,也许只是一个 BUG 吧……
我个人的习惯是,服务器端程序在正常的响应中加入自己的 success 标志,而小程序端不使用 success 和 fail,只使用 complete,只有在 'request:ok' 并且自己的 success 标志置位的情况下,才认为“成功”,否则认为“失败”。
返回的数据是什么