Jquery 如何在Backbone.js收集请求中处理204响应
在我基于Backbone.js的应用程序中,我正在与我的API交谈,该API以204状态和空正文响应,以防请求的集合尚未包含任何数据。在我看来,RESTful API在这种情况下应该如何响应 在我的应用程序中,现在我遇到了一个问题,在收到204响应后,显然没有触发任何事件。我尝试绑定Jquery 如何在Backbone.js收集请求中处理204响应,jquery,ajax,backbone.js,Jquery,Ajax,Backbone.js,在我基于Backbone.js的应用程序中,我正在与我的API交谈,该API以204状态和空正文响应,以防请求的集合尚未包含任何数据。在我看来,RESTful API在这种情况下应该如何响应 在我的应用程序中,现在我遇到了一个问题,在收到204响应后,显然没有触发任何事件。我尝试绑定reset和all如下: FoosCollectionView.prototype.initialize = function() { this.collection = new FoosCollecti
reset
和all
如下:
FoosCollectionView.prototype.initialize = function() {
this.collection = new FoosCollection;
this.collection.bind('reset', this.render, this);
this.collection.bind('all', this.render, this);
return this.collection.fetch();
};
但这些事件从未发生过。所以我试着回电:
FoosCollectionView.prototype.initialize = function() {
this.collection = new FoosCollection();
return this.collection.fetch({
success: function(a, b, c) {
debugger;
},
error: function(a, b, c) {
debugger;
},
complete: function(a, b) {
debugger;
}
});
};
同样的行为。如果响应为204,则永远不会到达调试语句。那我怎么处理204个回复呢?我是否需要深入研究sync
并为204添加额外的处理,或者主干网中是否有我不知道的东西
Thx Felix这个解决方案同时看起来非常超前和笨拙: 我只是在集合中定义
parse
方法,以便它检查传递的响应对象是否为空。只有在发生事故时才是这样。然后在parse
I内设置this.collection.models=[]
,它会触发一个reset
事件。collections视图绑定到该事件,运行一个函数,可以查看this.collection.models
。如果未提供任何模型,则可以呈现“无内容”模板,而不是标准模板
如果有人有更好的方法,我会很感激的 Backbone.js将此类响应包装到空集合中。我用这个作为解决办法
render: function(){
if (this.collection.length == 0) {
console.log('empty response');
// initialize with default values
this.collection.reset(data);
}
// do usual stuff
}
今天也发生了同样的问题,从结论来看,我的代码是错误的。 修改代码后,当服务器响应
204无内容时,调用了success()
回调
主干:1.2.3
jQuery:2.1.4
错误代码:
FooCollection=Backbone.Collection.extend({
url:“/foo”,
模型:FooModel,
获取:函数(选项){
//做点什么。
//实际上,您应该调用`Backbone.Collection.prototype.fetch()`。
返回Backbone.Model.prototype.fetch.call(这个选项);
}
});
因此,如果您遇到这个问题,您应该检查代码中是否有任何错误。
无论如何,如果要处理204 No Content
响应,有以下方法(不推荐)
初始化:函数(){
this.collection=new FooCollection();
var_this=这个;
这是我的收藏({
成功:功能(收集、响应、选项){
},
错误:函数(收集、响应、选项){
}
}).done(函数(数据、文本状态、jqXHR){
if(jqXHR.status==204){
//做点什么。
//例如,_this.collection.reset();
}
});
}
据我所知,我可以向collections解析方法添加一些登录名。但是从那里处理“无内容”视图的呈现看起来很难看。我找到了一个至少看起来更优雅一点的解决方案。我在集合中定义解析。在内部,我检查给定的响应是否为空。如果是这样,我将集合模型设置为[],这反过来会触发重置事件。集合视图绑定到该事件,并且可以随后呈现一些“此处无内容”模板。