2

我完成了使用 rails-api gem 创建 JSON API 的 Ryan Bates #348 视频。我让它像示例中一样工作。但是,在他的示例中,他有在同一个项目中调用 API 的页面。我的目标是将客户端应用程序与 API 应用程序分开。

我创建了第二个 Rails 应用程序,它只包含对 API 数据执行 JSON 请求的页面和提交表单时的帖子。我有在 localhost:3000 上运行的客户端应用程序和在 localhost:4000 上运行的 API。

下面是客户端代码。它成功提交了新的交易记录,但 GET 没有加载交易列表。在查看日志时,它似乎正在以 HTML 格式请求它。当页面属于同一个 API 项目时,相同的代码在日志中以 JSON 形式进行调用。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
  $(function() {
    function addDeal(deal) {
      $('#deals').append('<li>' + deal.name + '</ul>');
    }

    $('#new_deal').submit(function(e) {
      $.post('http://localhost:4000/deals', $(this).serialize(), addDeal);
      this.reset();
      e.preventDefault();
    });

    $.getJSON('http://localhost:4000/deals', function(deals) {
      $.each(deals, function() { addDeal(this); });
    });
  });
</script>

<div id="container">
  <h1>My Deals</h1>
  <form id="new_deal">
    <input type="text" name="deal[name]" id="deal_name">
    <input type="submit" value="Add">
  </form>
  <ul id="deals"></ul>
</div>
4

1 回答 1

2

由于跨域策略,您有以下选项:

  1. 使用 jsonp (不要这样做,因为你有你的服务器 :) 检查下面)
  2. 在服务器上管理跨域资源共享,最近我在这里写了答案如何实现这一点
  3. 您可以使用 rails ActiveResource::Base连接到您的 api,但它可能会很慢,并且您会重复自己,除非您在后端需要一些演示逻辑。顺便说一句,检查Nibbler gem 它可能会更好......这真的取决于你需要在后端做什么。

无论如何。我会避免方法 1,它有点开销,特别是如果你想 POST、PUT 或 DELETE,如果你有纯 JavaScript 应用程序作为 UI 运行,你可以允许使用选项 2。但是,即使您正在构建与 JS 无关的应用程序,您也总是需要一些后端处理,因此选项 3 可能是您更喜欢的。

于 2012-08-26T22:03:47.667 回答