如何从backbone.js应用程序中的远程服务器获取json数据

时间:2012-05-07 13:22:14

标签: ruby-on-rails json api backbone.js

我正在关注此repo的应用示例 我开始使用rails intead php for API在我的本地机器上构建一个类似的应用程序,所以我在一个特定的根目录中构建rails应用程序,然后在另一个根目录中使用rails.js / JQM应用程序调用rails api。

所以我使用urlRoot创建模型和骨干集合:http://localhost:3000/api/clubs.json,对应于用于检索俱乐部列表的本地服务器URL

然后我试图在javascript控制台中看到这些命令会发生什么:

clubs = new ClubsCollection()

Object {length = 0 ...etc..}

clubs.fetch()
GET http://localhost:3000/api/clubs.json 200 OK

并且回复是空的......

但是当我调用网址http://localhost:3000/api/clubs.json时,它会正确返回json俱乐部列表。

你能帮我理解做这个电话的最好方法吗?

3 个答案:

答案 0 :(得分:1)

fetch是异步的。你必须等待它完成加载数据,然后检查响应。这通常通过reset事件完成:


clubs = new ClubsCollection();
clubs.on("reset", function(){
  alert(clubs.length + " item(s) found");
});
clubs.fetch();

答案 1 :(得分:1)

我已使用'rack-cors' gem和基本配置解决了问题

配置/ application.rb中:

config.middleware.use Rack::Cors do
      allow do
        origins 'localhost'
        resource '%r{/api/\$+.json}',
          :headers => ['Origin', 'Accept', 'Content-Type'],
          :methods => [:get, :put, :delete]
      end
end

答案 2 :(得分:0)

如果查看骨干API,可以通过fetch()调用提供成功的回调,例如

clubs.fetch({    成功:功能(型号,错误){//做某事} });

与其他答案一样,fetch是异步的,所以你不能指望通过在.fetch()调用之后设置一个断点来恢复结果。