我制作了一个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;
}