如何使用 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 数据,这不是必需的