如何使用 Mithril 的 m.request 从服务器加载数据?
How use Mithril's m.request to load data from a server?
我想将 json 文件的块存储到数组中。 这是我当前的代码,在控制器 (ctrl) 中:
var ctrl = this;
var id = (location.href).replace(/.*\//g, ''); //use m.route() ?
ctrl.list = [];
m.request({method: "GET", url: "/data/"+id}).then(function(blocks){
blocks.map(function(block) {
ctrl.list.push(block);
});
});
console.log(ctrl.list); //Result : an empty array. Why ?
m.request
是一个异步操作:它需要向服务器发出请求,等待服务器响应,加载内容,然后给你响应——这就是它实现[=的原因11=]:给你一个回调,这样你就可以在数据到达时处理它。
但是您的 console.log
在您发出请求后立即发生:响应尚未准备好。任何依赖于服务器数据的东西都需要在 then
回调函数中调用。
controller: function() {
var response = m.prop(); return {
response: m.request({method:"GET",
url:"http://yourUrl", data:{date to send in Json format}}),
在视图中
m("ul" , ctrl.response().map(function(folder){
return [
m("li" , folder.name),
本例中的文件夹是您从服务器接受的 Json,假设您在响应 ["name" : "Jhon"],用 folder.name 你的 li 的值将变成 Jhon。 请记住,m.request 至少需要 方法 和 url 数据,这不是必需的