1

我正在尝试从 Laravel 路由返回 JSON 输出。这是我的路线:

Route::get('main-contact-count', function() {
    $mc = MainContact::where('flag', '=', '1')->count();
    return Response::json(['count' => $mc]);
});

如果我查看 Firebug 中的响应选项卡,我会回来:

{"count":9}

JSON 编码缺少方括号。这个 JSON 不同于 Laravel 从资源丰富的控制器返回的 JSON。它有方括号。Backbone 可以很好地解析它。Backbone 没有正确解析上述 JSON。如果您在console.log收藏时查看长度和型号,它们都为零。但是,您可以深入到对象中,并且可以找到count设置为 9 的属性。

如何从 Laravel 中获取正确的 JSON?

只是为了好玩和咯咯笑,我发布了我的 Backbone,以防我在那里做一些奇怪的事情:

App.Collections.Count = Backbone.Collection.extend({
        model: App.Models.Count,
        initialize: function(models, options) {
            this.fetch({
                success: function(data, options) {
                    // console.log(data.models);
                }
            });
            if (options) {
                this.url = this.url || options.url;
            }
        }
    });

    App.Views.Count = Backbone.View.extend({
        tagName: 'span',
        className: 'leadCount',
        template: _.template($('#contactCount').html()),
        initialize: function() {

        },
        render: function() {
            this.$el.html(this.template(this.collection.toJSON()));
            return this;
        }
    });

在我的路线中:

var mc = new (App.Collections.Count.extend({ url: 'main-contact-count' }))();
var mcv = new (App.Views.Count.extend({ collection: mc }))();
4

2 回答 2

2

您的服务发送的 JSON 响应是单个 JSON 对象 ( {...}) 您的集合无法解析它,因为它需要一个 JSON 对象数组 ( [{...}, {...}])。

如果我正确理解了您的代码,/main-contact-count则它是一项专门的服务,其功能是返回和单一数据:联系人计数。如果是这种情况,Backbone.Collection可能不是正确的解决方案。集合是为了……嗯,东西的集合。

您应该只使用一个模型:

App.Models.Count = Backbone.Model.extend({
    url:'main-contact-count'
});

var countModel = new App.Models.Count();
countModel.fetch({success: function(model, resp) {
    var count = model.get('count');
});

或者更好的是,完全放弃 Backbone,只使用 jQuery 获取数据:

$.getJSON('main-contact-count', function(response) {
    var count = response.count;
});
于 2013-01-09T23:04:45.413 回答
0

尝试:

return Response::json(array(array('count' => $mc));
于 2013-01-09T23:03:27.680 回答