收藏
回答

request 回调函数问题 success fail

问题模块
API和组件

调用wx.request接口后,服务器返回HTTP状态码401,本来希望小程序中掉起fail回电函数,但是掉起的是success。请问success和fail是怎么界定的?

最后一次编辑于  2017-05-22  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

4 个回答

  • Ace
    Ace
    2017-05-22

    返回的数据是什么

    2017-05-22
    赞同
    回复
  • maq
    maq
    2017-05-23

    我猜想 wx.request 的 success 和 fail 本意是用来区分网络层的成功与失败,比如连接超时、传输中断。这样的话,401、500 之类被归为 success 似乎也说得通,因为它至少在 HTTP request/response 层面是完整的。


    但无论如何这种处理方式的确有点反直觉,也许只是一个 BUG 吧……


    我个人的习惯是,服务器端程序在正常的响应中加入自己的 success 标志,而小程序端不使用 success 和 fail,只使用 complete,只有在 'request:ok' 并且自己的 success 标志置位的情况下,才认为“成功”,否则认为“失败”。

    2017-05-23
    赞同
    回复
  • maq
    maq
    2017-05-23

    顺便附上我的对 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) {
        // ...
    });


    2017-05-23
    赞同
    回复
  • @JP
    @JP
    2017-05-26

    返回的数据是什么

    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来定性结论,这是不对等的。



    2017-05-26
    赞同
    回复