成功的请求在错误钩子中解包
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
钩子。
真正让我困惑的是这两件事:
- 请求成功 - 我可以在 Chrome 的开发工具中看到它。没有任何访问错误的迹象;
- 错误挂钩收到的第一个参数正是我所期望的JSON;第二个参数是相应的 XMLHttpRequest 对象,没有任何错误指示。
因此与 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 这样的简单网络服务器可以解决这个问题。
我有一个模拟 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
钩子。
真正让我困惑的是这两件事:
- 请求成功 - 我可以在 Chrome 的开发工具中看到它。没有任何访问错误的迹象;
- 错误挂钩收到的第一个参数正是我所期望的JSON;第二个参数是相应的 XMLHttpRequest 对象,没有任何错误指示。
因此与 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 这样的简单网络服务器可以解决这个问题。