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は、リソースの豊富なコントローラーから返されるJSONLaravelとは異なります。角かっこが付いています。バックボーンはそれをうまく解析します。バックボーンは上記のJSONを正しく解析しません。コレクションの長さとモデルを見ると、console.logどちらもゼロです。countただし、オブジェクトにドリルダウンすると、 9に設定されたプロパティを見つけることができます。

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;
        }
    });

そして私のルートでは:

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 に答える