Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Laravel4和主干网配合不好--JSON格式不正确_Backbone.js_Laravel - Fatal编程技术网

Backbone.js Laravel4和主干网配合不好--JSON格式不正确

Backbone.js Laravel4和主干网配合不好--JSON格式不正确,backbone.js,laravel,Backbone.js,Laravel,我试图从Laravel路由返回JSON输出。这是我的路线: Route::get('main-contact-count', function() { $mc = MainContact::where('flag', '=', '1')->count(); return Response::json(['count' => $mc]); }); var mc = new (App.Collections.Count.extend({ url: 'main-conta

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

Route::get('main-contact-count', function() {
    $mc = MainContact::where('flag', '=', '1')->count();
    return Response::json(['count' => $mc]);
});
var mc = new (App.Collections.Count.extend({ url: 'main-contact-count' }))();
var mcv = new (App.Views.Count.extend({ collection: mc }))();
如果我查看Firebug中的响应选项卡,我会返回:

{"count":9}
JSON编码缺少方括号。此JSON不同于JSON Laravel从资源丰富的控制器返回的结果。它有方括号。主干解析得很好。主干无法正确解析上述JSON。如果在
console.log
a集合时查看长度和型号,它们都是零。但是,您可以深入到对象中,找到设置为9的
count
属性

如何从Laravel获得正确的JSON

只是为了好玩和咯咯笑,我把我的脊梁骨贴出来,以防我在那里做了一些奇怪的事情:

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;
        }
    });
在我看来:

Route::get('main-contact-count', function() {
    $mc = MainContact::where('flag', '=', '1')->count();
    return Response::json(['count' => $mc]);
});
var mc = new (App.Collections.Count.extend({ url: 'main-contact-count' }))();
var mcv = new (App.Views.Count.extend({ collection: mc }))();
尝试:


您的服务发送的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');
});
或者更好的是,完全放弃主干网,只需使用jQuery获取数据:

$.getJSON('main-contact-count', function(response) {
    var count = response.count;
});

laravel返回的json是正确的,[]在php中不是[]在javascript中。在您的情况下,Laravel返回一个对象而不是数组是正确的,因为php数组中有一些字符串键。如果要返回一个对象数组,请返回一个数组(array('count'=>$mc)),它会给我一个服务器错误。这是一个需要返回正确的Laravel响应的示例。请看下面我的答案。我仍然得到一个空数组where?从服务器还是js主干代码?即使$mc为null,在这种情况下,服务器响应也不能是空数组。在主干网示例中,当我向它发出警报时,我将计数设为未定义。我知道了。我的代码中仍然有来自加缪答案的JSON调用。谢谢,芬克利夫。谢谢你告诉我用模型代替。我对此感到奇怪。