0

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

4

1 回答 1

1

所以我在这里找到了解决方案。因为这是一个远程服务器,所以我从我可以使用 JSONP 获取 json。

在 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 / 主干需要回调函数中的数据。

如果 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"

})

现在你完成了。

于 2013-05-13T08:03:22.507 回答