我制作了一个Backbone Collection来按以下方式操作4chan API中的Boards对象:

var BoardsCollection = Backbone.Collection.extend({
    model: Board,
    url: 'https://api.4chan.org/boards.json',
    sync: function(method, model, options){
        options.timeout = 10000;
        options.dataType = "jsonp";
        options.crossDomain = true;
        return Backbone.sync(method, model, options);
    }

});
return new BoardsCollection();


因为跨域错误,我提出了JSONP请求以使其工作,但4chan响应的JSON如下所示:

{"boards":
    [{"board":"3","title":"3DCG","ws_board":1,"per_page":15,"pages":11},
     {"board":"a","title":"Anime \u0026 Manga","ws_board":1,"per_page":15,"pages":11}]


由于存在“ boards”项,因此不是有效的JSONP,并且主干的解析器因错误“意外字符:”而失败。

因此,我需要一种方法来编辑服务器的响应,从键“面板”中提取值,然后将其传递给集合以进行解析。

附带说明一下,我在node.js中制作了一个小服务器,该服务器从4chan中获取json并提取了boards的值并将其返回,收集工作正常。但是我将使用它制作一个jquery移动应用程序,因此我需要连接到真正的4chan API。

谢谢。

最佳答案

问题不在于json的格式,而在于它只是json,而不是jsonp。 Jsonp是通过<script>标记加载的,因此它必须是正确的javascript代码,它应类似于callback({data:'data'})

在您的情况下,您需要设置服务器以将请求代理到4chan api。如果在同一域上运行它,则可以使用简单的XmlHttpRequests。然后,通过collection的parse函数解决boards顶级密钥的问题:

parse: function (response) {
    return response.boards;
}

09-29 23:30