使用骨干集合我试图从页面获取JSON。但是,浏览到这个页面确实给了我一个JSON,使用collection.fetch没有。
在Firebug中看到我看到了:
"GET http://survey/api/list_surveys 200 OK 4ms"
此文本为红色,“响应”选项卡为空。
模特:
var SurveyList = Backbone.Model.extend({
defaults: {
"sid": "",
"title": '',
"surveyUrl": ""
},
initialize: function() {
console.log('MODEL AANGESPROKEN');
}
});
收藏品:
var Surveys = Backbone.Collection.extend({
model: BGGZ.SurveyList,
url: 'http://survey/api/list_surveys'
});
JSON:
[{
"sid":"12345",
"surveyls_title":"test 1",
"survey_url":"http://survey/index.php?newtest=Y&sid=12345"
},
{
"sid":"54321",
"surveyls_title":"Test 2",
"survey_url":"http://survey/index.php?newtest=Y&sid=54321"
}]
有没有人有解决方案? 我已经在集合中尝试过解析,但这没有帮助。
这可能与json有填充有关吗? 如果是这样我该如何解决?
答案 0 :(得分:1)
所以我在这里找到了解决方案。 由于这是一个远程服务器,我从json获得json可以使用JSONP。
在collection.fetch()中,Backbone使用jQuery的$ .ajax()方法来获取数据。 因此,您可以将$ .ajax设置放在fetch:
中myCollection = new Surveys();
myCollection.fetch({
dataType: "jsonp",
success: function(data) {
console.log(data);
},
error: function() {
console.log('error');
}
});
现在,如果您的API不期望JSONP,这将无效。 JSONP将为您的API提供回调参数。您的API调用首先看起来像这样:
http://survey/api/list_surveys
使用JSONP现在看起来像这样:
http://survey/api/list_surveys?callback=jQuery12654876544
您的API不应返回标准JSON,因为jQuery / backbone期望回调函数中的数据。
如果JSON首先看起来像这样:
{
"sid":"12345",
"surveyls_title":"test 1",
"survey_url":"http://survey/index.php?newtest=Y&sid=12345"
}
您现在必须将API添加到此回调函数中:
jQuery12654876544({
"sid":"12345",
"surveyls_title":"test 1",
"survey_url":"http://survey/index.php?newtest=Y&sid=12345"
})
现在你已经完成了。