异步调用外部API,在heroku上调用rails

时间:2014-03-04 01:48:03

标签: ruby-on-rails ajax heroku

在我的rails / heroku网络应用程序中,我调用了一个外部API,(在视图中使用了json结果)。目前该调用是在控制器中,但我遇到的问题是外部源非常慢,导致页面加载缓慢,甚至超时。我认为我不能使用常规的jquery / js / ajax,因为 API调用包含我的私有API密钥。如何异步拨打此电话?

1)我可以在控制器中进行异步调用,或者是  2)从视图拨打电话时,我可以隐藏我的密钥吗?  3)有更好的方法来解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:0)

考虑添加另一条路由来代理长请求。从您的角度来看,使用AJAX加载该路由并在返回时将结果添加到DOM。在那段时间之前,你可以显示一个花哨的微调器 gif或像 loading ...

例如

的routes.rb

...
get '/long_calls/show' => 'long_calls#show'
get '/long_calls/show2' => 'long_calls#show2'
...

long_calls_controller.rb

class LongCallsController < ApplicationController
  def show
    @message = "*Please Wait*"
  end

  def show2
    @message = LongCall.thing_that_takes_a_long_time
  end
end

视图/ long_calls / show.html.erb

<script>
  $(function) {
    $.get("show2");
  }
</script>
<div id='lazyload'>
  <%= @message %>
</div>

视图/ long_calls / show2.js.erb

$("#lazyload").html("<% escape_javascript @message %>");