BackboneJS集合获取空结果

时间:2013-05-11 20:58:41

标签: javascript jquery json backbone.js jsonp

使用骨干集合我试图从页面获取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有填充有关吗? 如果是这样我该如何解决?

1 个答案:

答案 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"

})

现在你已经完成了。