成功的请求在错误钩子中解包

Successful requests get unwrapped in error hook

我有一个模拟 json 文件,我想将其读入对象。我的代码如下所示:

m = require('mithril');

/* .. snip .. */

var foo = m.prop([]);

m.request({
    method: 'GET',
    url: './foo.json',
    unwrapSuccess: function (a, b) {
        console.log("success");
    },
    unwrapError: function (a, b) {
        console.log("error");
    }
}).then(function (a) {
    // fill in foo
    console.log("object filled");
});

代码总是只命中 unwrapError 钩子。

真正让我困惑的是这两件事:

因此与 documentation 相反,响应对象不包含 "error" 属性 告诉我发生了什么。

我做错了什么?

我做了一个例子来展示如何使用 unwrapSuccess/unwrapError:

// No need for m.prop since m.request returns a GetterSetter too
var foo = m.request({
    method: 'GET',
    url: '//api.ipify.org?format=json',
    unwrapSuccess: function (a, b) {
        console.log("success: " + a.ip);
        // Remember to return the value that should be unwrapped
        return a.ip;
    },
    unwrapError: function (a, b) {
        console.log("error");
    }
}).then(function (ip) {
    console.log("object almost filled");
    // And remember to return the value to the GetterSetter
    return ip;
});

m.mount(document.getElementById('content'), { 
    view: function() { return "Your IP: " + foo(); }
});

在这里测试:http://jsfiddle.net/ciscoheat/LL41sy9L/

编辑: 实际问题是本地文件发出 ajax 请求。 Chrome 禁止来自 file:// 个网址的 ajax 个调用。使用像 http-server for Node.js 这样的简单网络服务器可以解决这个问题。