Backbone.js Laravel4和主干网配合不好--JSON格式不正确
我试图从Laravel路由返回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
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调用。谢谢,芬克利夫。谢谢你告诉我用模型代替。我对此感到奇怪。