我完成了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/