m.request:确定XHR失败的具体原因?

时间:2016-08-05 18:32:45

标签: xmlhttprequest mithril.js

问题

当mithril的m.request因超时或网络错误而失败时,返回的错误只是null。这使得无法区分

  1. 超时
  2. 缺乏互联网连接
  3. 其他类型的错误。
  4. 有没有办法确定这些信息?

    演示

    在下面的代码段中,请求每次都会超时,因为限制为1毫秒。返回的错误是null。如果将其更改为1000毫秒,它将起作用。如果您关闭了wifi,然后重试,它将返回另一个null错误。

    
    
    const Test = {
      controller: function() {
    
        var user = m.prop('Waiting...');
        var error = m.prop();
    
        var args = {
          method: 'GET',
          url: "https://jsonplaceholder.typicode.com/users",
          config: function(xhr) {
            xhr.timeout = 1;
          }
        };
    
        function refreshUser() {
          m.request(args)
           .then( users => user(users[0].name), error);
        }
        return { user, error, refreshUser};
      },
      view: function(ctrl) {
        return m('div', [
          m('div',  'Fetched User: ' + ctrl.user()),
          m('div', 'Network Error: ' + ctrl.error()),
          m('button', {onclick: ctrl.refreshUser }, 'Refresh User')
        ]); 
      }
    }
    m.mount(document.body, Test);
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mithril/0.2.5/mithril.min.js"></script>
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:2)

您可以将一个参数传递给名为m.request的{​​{1}},其中包含xhr响应。希望你能找到你需要的东西。

m.request docs的示例:

extract