【问题标题】:Edit / extract data before gets to the json parser in a Backbone collection在到达 Backbone 集合中的 json 解析器之前编辑/提取数据
【发布时间】:2013-10-12 00:42:29
【问题描述】:

我创建了一个 Backbone 集合来操作来自 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}]

不是有效的 JSONP,因为 "boards" 项目和主干解析器失败并出现错误 "unexpected character :"。

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

作为旁注,我在 node.js 中创建了一个小服务器,它从 4chan 获取 json 并提取 board 的值并返回它,这样集合就可以正常工作了。但我将使用它来制作一个 jquery 移动应用程序,所以我需要连接到真正的 4chan API。

谢谢。

【问题讨论】:

  • 如果没有 node.js 或 php 之类的代理,您将无法做到这一点

标签: javascript json backbone.js collections


【解决方案1】:

问题不在于 json 的格式,而在于它只是 json,而不是 jsonp。 Jsonp 是通过<script> 标签加载的,所以它需要是一个正确的 javascript 代码,它应该像callback({data:'data'})

在您的情况下,您需要设置一个服务器来代理对 4chan api 的请求。如果你在同一个域上运行它,你可以使用简单的 XmlHttpRequests。然后通过集合的解析函数解决了boards 顶级键的问题:

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

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2014-08-09
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多