backbone.js应该如何处理不返回结果的GET请求?

时间:2012-06-16 23:51:53

标签: javascript jquery codeigniter rest backbone.js

我有一些文本输入元素,当它们的值发生变化时,会触发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();
    }
});

3 个答案:

答案 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);
相关问题