Json Backbone.js在集合上使用fetch()返回无模型、200 OK和空响应
我正在使用Backbone.js构建一个注释对象。 集合中的URL返回如下所示的json:Json Backbone.js在集合上使用fetch()返回无模型、200 OK和空响应,json,backbone.js,fetch,Json,Backbone.js,Fetch,我正在使用Backbone.js构建一个注释对象。 集合中的URL返回如下所示的json: {'type': 'comment', 'data': [{"body": "commment number 1!", "create_dt": 1343166264000, "comment_id": 1, "depth": 0, "user": {"sid": "1"
{'type': 'comment',
'data': [{"body": "commment number 1!",
"create_dt": 1343166264000,
"comment_id": 1, "depth": 0,
"user": {"sid": "1",
"uid": "1",
"name": "Amie C",
"level": "2"},
"sid": 1
},
{"body": "commment number 1-1!",
"create_dt": 1343166361000,
"comment_id": 4,
"depth": 1,
"user": {"sid": "1",
"uid": "1",
"name": "lila M",
"level": "2"},
"sid": 1}
}]
}
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Share</title>
<link rel="stylesheet" href="share.css" type="text/css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://backbonejs.org/backbone-min.js"></script>
<script src="js/comment.js"></script>
</head>
<body>
<div class="main_app">
<div class="comments_container"></div>
</div>
</body>
</html>
url在浏览器中工作,我可以看到所有json返回。然而,我遇到的问题是加载comment.js时没有返回数据。我会看到一个红色的Get请求,它说200 OK,并且在响应中没有主体。我的模型的长度也是0
非常感谢您的光临
这里是comment.js:
//default comment model
var Comment = Backbone.Model.extend({
defaults: {
body: "",
create_dt: null,
comment_id: null,
depth: null,
user: null,
sid: null
}
});
//instaitiate a new comment
var comment = new Comment;
//default event view
var CommentView = Backbone.View.extend({
tagName: "li",
className: "comment",
initialize: function(){
this.render();
},
render: function(){
$(this.el).html(this.model.toJSON());
return this;
}
});
//default comments collection
var Comments = Backbone.Collection.extend({
model: Comment,
initialize: function(){
},
url:"http://127.0.0.1/test/objects/json/comments.json",
parse: function(resp) {
return resp.data;
}
});
//default eventsview for events collection's view
var CommentsView = Backbone.View.extend({
tagName: "ul",
className:"comments",
intialize: function(){
this.render();
},
render: function(){
_.each(this.collection.models, function(comment){
//init the CommentView and passed in its model here
var commentView = new CommentView({model: comment});
$(this.el).prepend(commentView.render().el)
}, this);
return this;
}
});
//instantiate new events collection
var comments = new Comments;
var commentsView = new CommentsView({collection: comments});
//on the new events collection, we fetch the data from URL
comments.fetch({
error:function(response, xhr){
console.log(response);
console.log(xhr)
},
success:function(){
console.log("success");
$('.comments_container').html(commentsView.render().el);
}
});
html如下所示:
{'type': 'comment',
'data': [{"body": "commment number 1!",
"create_dt": 1343166264000,
"comment_id": 1, "depth": 0,
"user": {"sid": "1",
"uid": "1",
"name": "Amie C",
"level": "2"},
"sid": 1
},
{"body": "commment number 1-1!",
"create_dt": 1343166361000,
"comment_id": 4,
"depth": 1,
"user": {"sid": "1",
"uid": "1",
"name": "lila M",
"level": "2"},
"sid": 1}
}]
}
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Share</title>
<link rel="stylesheet" href="share.css" type="text/css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://backbonejs.org/backbone-min.js"></script>
<script src="js/comment.js"></script>
</head>
<body>
<div class="main_app">
<div class="comments_container"></div>
</div>
</body>
</html>
分享
我认为问题在CommentView
中:
render: function(){
$(this.el).html(this.model.toJSON());
return this;
}
this.model.toJSON()
不返回字符串,因此当您将其直接放入html中时,它不会显示
请尝试以下方法:
$(this.el).html(JSON.stringify(this.model));
可能原因:1。响应不是内容类型application/json
,2。您有跨域问题。有关您的响应的更多详细信息可能会有所帮助,例如标题。如果您在OSX中工作,可以尝试curl-I
。在请求/响应时刻,浏览器控制台调试的屏幕截图也会有所帮助。下面的答案对你有用吗?如果是,请将其标记为已接受。如果没有,请告诉我出了什么问题。谢谢