如何使用Mithril的m.request从服务器加载数据?

时间:2015-06-01 09:10:18

标签: javascript ajax mithril.js

我想将json文件的块存储到数组中。 这是我当前的代码,在controller(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 ?

2 个答案:

答案 0 :(得分:0)

m.request是一个异步操作:它需要向服务器发出请求,等待服务器应答,加载内容,然后给你响应 - 这就是它实现{{1}的原因}:给你一个回调,这样你就可以在数据到达时对数据进行处理。

但是,在您发出请求后,您的then会立即发生:响应尚未准备就绪。需要在console.log回调函数内调用任何依赖于服务器数据的内容。

答案 1 :(得分:0)

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