主干.js如何处理不返回结果的 GET 请求

How should backbone.js handle a GET request that returns no results?

本文关键字:返回 结果 请求 GET 处理 js 何处理 主干      更新时间:2023-09-26

我有许多文本输入元素,当其值更改时,将触发listingListView的集合listingCollection的获取,然后通过函数listingListView.refreshList使用新数据更新listingListView,如下所示。我正在使用 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();
    }
});

主干在"同步"错误时触发"错误"事件。可以通过在视图中创建错误处理程序函数来捕获 404 错误。

this.model.on('error',this.defaultErrorHandler,this);
defaultErrorHandler: function(model, error) {
        console.log('status', error.status);
    }

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

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

$this->response(NULL, 200);