【问题标题】:how to fetch json data from a remote server in a backbone.js app如何从backbone.js应用程序中的远程服务器获取json数据
【发布时间】:2012-05-16 00:11:00
【问题描述】:

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

所以我使用 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

而响应为空...

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

您能帮我了解进行此通话的最佳方式吗?

【问题讨论】:

  • 您确定没有任何跨域问题吗?请检查网络浏览器控制台。
  • 我不知道,一切都在本地运行,但是在两个不同的服务中,一个是 rails 服务器,另一个是 apache。
  • 您的浏览器开发者面板是否灵活?您使用的是哪种浏览器?
  • 我正在使用firefox和firebug,实际上我发布的代码是我写入firebug控制台的代码
  • 发出请求时,Rails 层上的日志显示什么?

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


【解决方案1】:

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


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

【讨论】:

  • 我所做的 ClubsCollection 的新实例是在 firebug 控制台上,所以我认为没有必要调用 bind/on 方法
【解决方案2】:

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

config/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

【讨论】:

    【解决方案3】:

    如果您查看主干 API,您可以通过 fetch() 调用提供一个成功回调,例如

    clubs.fetch({ 成功 : function(model, err) { // 做某事 } });

    与其他答案一样,fetch 是异步的,因此您不能指望通过在 .fetch() 调用之后设置断点来返回结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多