我完成了Ryan Bates#348视频,用于使用rails API gem创建JSON API我让它像例子中那样工作然而,在他的例子中,他有一个页面在同一个项目中调用API我的目标是将客户端应用程序与api应用程序分开。
我创建了第二个rails应用程序,它只包括对api数据执行json请求的页面和提交表单时的post。我在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>

最佳答案

由于跨源策略,您有以下选项:
使用jsonp(不要这样做,因为你有你的服务器:)检查下面)
管理服务器上的跨源资源共享,最近我写了答案here如何实现这一点
您可以使用railsActiveResource::Base来连接到您的api,但它可能会很慢,除非后端需要某种表示逻辑,否则您会重复自己的操作顺便说一句,检查一下Nibbler宝石可能会好些…这真的取决于你需要在后台做什么。
无论如何。我会避免使用方法1,这是一种开销,特别是如果你想发布、放置或删除,如果你有纯javascript应用程序作为ui运行,你可以使用选项2。但是,即使你正在构建与js无关的应用程序,你也总是需要一些后端处理,所以选项3可能是你更喜欢的。

关于html - Rails JSON API-域问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12134161/

10-11 23:01
查看更多