我刚开始学习mithril,并且正在尝试编写一个与RESTful API交互的简单前端。但是,当我在浏览器中加载时,浏览器每秒发出30次GET请求到'/ posts'!我不确定这是否是我的代码错误或mithril工作原理......如何在整个代码中使m.request发出请求一次,或者更新Post.list?m.request问题太多请求
var Post = {
model: function(data) {
data = data || {};
this.id = m.prop(data.id);
this.text = m.prop(data.text);
this.rating = m.prop(data.rating);
this.created_at = m.prop(data.created_at);
this.url = m.prop(data.url);
this.title = m.prop(data.title);
this.user_id = m.prop(data.user_id);
},
list: function() {
return m.request({
method: "GET",
url: "/posts/",
type: Post.model
});
}
}
var PostIndex = {
controller: function() {
this.posts = Post.list();
},
view: function(ctrl) {
return [
m("table.table", [ m("tbody", [
ctrl.posts().map(function(post) {
return m("tr", [
m("td.heading", { onclick: m.route('/posts/' + post.id) }, [
post.title,
m("small", post.url)
]),
m("td", [ m("small", post.user + ": " + post.created_at) ])
]);
})
])])
];
}
};
m.request是基本的AJAX。 “/ posts /”的网址没有给你一个帖子列表。你需要“GET”一个文件,而不是目录。米索莉希望这个文件是一个JSON文件。该文件也可以是您的后端(php/python/perl/javascript)返回JSON的脚本。如果它不返回JSON,则有方法将响应转换为JSON。首先阅读AJAX,然后阅读m.request上的Mithril文档:http://lhorie.github.io/mithril/mithril.request.html –
是的,我明白了;我还在sinatra中运行后端Web API,它在'/ posts /'中为JSON中的帖子提供数组。我的问题不是解析JSON或显示帖子的内容,而是关于为什么m.request每秒钟触及服务器<30次。 –
对不起,很难告诉开发人员如何使用一段代码。我不能在没有看到更多代码的情况下回答你的问题,但是AFAIK唯一可以进行这么多调用的Mithril是在创建列表的视图中使用了m.request,并且我没有在上面的代码中看到这个错误。 sinatra是否提供JSON“文件”,或者是一个一个一个的数组?是否有多个帖子,每个都是JSON格式,或者是一个包含所有帖子的JSON数组 - 正如m.request所期望的那样? sinatra是否可能在吐出流中的帖子?我很抱歉,我对sinatra或您正在使用的图书馆知之甚少。 –