Jquery 如何在Backbone.js收集请求中处理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

在我基于Backbone.js的应用程序中,我正在与我的API交谈,该API以204状态和空正文响应,以防请求的集合尚未包含任何数据。在我看来,RESTful API在这种情况下应该如何响应

在我的应用程序中,现在我遇到了一个问题,在收到204响应后,显然没有触发任何事件。我尝试绑定
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解析方法添加一些登录名。但是从那里处理“无内容”视图的呈现看起来很难看。我找到了一个至少看起来更优雅一点的解决方案。我在集合中定义解析。在内部,我检查给定的响应是否为空。如果是这样,我将集合模型设置为[],这反过来会触发重置事件。集合视图绑定到该事件,并且可以随后呈现一些“此处无内容”模板。