3

我有许多文本输入元素,当其值发生更改时,将触发 fetchlistingListView的 collection listingCollection,然后通过如下所示listingListView的函数使用新数据进行更新。listingListView.refreshList我正在使用 PHP/Codeigniter 来公开 RESTful API。

问题:如果从fetch(). 但是,当过滤器没有返回结果时,服务器端和客户端应该如何处理呢?目前 Chrome 的 javascript 控制台显示404错误,并且在 Network 选项卡中,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();
    }
});
4

3 回答 3

3

Backbone triggers an "error" event on "sync" errors. You can catch the 404 error by creating an error handler function in your view.

this.model.on('error',this.defaultErrorHandler,this);

defaultErrorHandler: function(model, error) {
        console.log('status', error.status);
    }
于 2012-06-17T00:54:30.997 回答
1

您可以重载主干中的错误事件;尽管最好更改来自服务器的 REST 响应。如果没有结果,则使用空的 JSON 对象发回 200 ok。请务必从服务器测试空对象。

于 2012-06-17T09:11:31.600 回答
0

没错,只需将响应设置为空,并将状态设置为 200:

$this->response(NULL, 200);
于 2013-03-24T10:22:50.213 回答