调用wx.request接口后,服务器返回HTTP状态码401,本来希望小程序中掉起fail回电函数,但是掉起的是success。请问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) { // ... }); |
返回的数据是什么
401时,服务器返回的数据是我自己定义的错误信息
我猜想 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来定性结论,这是不对等的。