我有一些文本输入元素,当它们的值发生变化时,会触发listingListView
集合listingCollection
上的抓取,然后通过新数据更新listingListView
函数listingListView.refreshList
如下所示。我正在使用PHP / Codeigniter来公开RESTful API。
问题:如果从fetch()
检索到结果,一切正常。但是,当过滤器导致没有返回结果时,服务器端和客户端应如何处理它?目前Chrome的javascript控制台显示404
错误,在网络标签中,XHR请求以红色突出显示。如果返回零结果,我想要做的就是将listingListView
空白并显示(没有返回结果)之类的消息,并且不会在javascript控制台中抛出任何错误。谢谢!
PHP代码
function listings_get() {
// Get filters
$price_min = $this->get('price_min');
$this->load->model('app_model');
$results = $this->app_model->get_listings($price_min);
if($results)
$this->response($results);
else
$this->response(NULL);
}
JS代码
window.ListingListView = Backbone.View.extend({
tagName: 'table',
initialize: function() {
this.model.bind('reset', this.refreshList, this);
this.model.bind('add', function(listing) {
$(this.el).append(new ListingListItemView({ model: listing }).render().el);
}, this);
},
render: function() {
_.each(this.model.models, function(listing) {
$(this.el).append(new ListingListItemView({ model: listing }).render().el);
}, this);
return this;
},
close: function() {
$(this.el).unbind();
$(this.el).empty();
},
refreshList: function() {
$(this.el).empty();
this.render();
}
});
答案 0 :(得分:3)
Backbone在“同步”错误上触发“错误”事件。您可以通过在视图中创建错误处理函数来捕获404错误。
this.model.on('error',this.defaultErrorHandler,this);
defaultErrorHandler: function(model, error) {
console.log('status', error.status);
}
答案 1 :(得分:1)
您可以在骨干网中重载错误事件;虽然最好从服务器更改REST响应。在没有结果的情况下,使用空的JSON对象发回200 ok。请务必从服务器测试空对象。
答案 2 :(得分:0)
是的,只需将响应设置为空,状态设置为200:
$this->response(NULL, 200);