Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的多个GET请求?_Ruby On Rails_Ruby_Get - Fatal编程技术网

Ruby on rails Rails中的多个GET请求?

Ruby on rails Rails中的多个GET请求?,ruby-on-rails,ruby,get,Ruby On Rails,Ruby,Get,我正在开发一个应用程序,在一个页面上,它需要大约12-15个GET请求才能在后台向API发出。我最初的意图是使用jQuery中的AJAX发出请求,但事实证明,使用我正在使用的steamwebapi是不可能做到这一点的 显然,在页面加载之前在Rails控制器中执行此操作非常缓慢 从API获取数据后,我解析数据并使用gon将其发送到JavaScript。问题是我不知道如何在页面呈现后获取和设置数据 以下是我的控制器的外观: def index @title = "My Stats" if n

我正在开发一个应用程序,在一个页面上,它需要大约12-15个GET请求才能在后台向API发出。我最初的意图是使用jQuery中的AJAX发出请求,但事实证明,使用我正在使用的steamwebapi是不可能做到这一点的

显然,在页面加载之前在Rails控制器中执行此操作非常缓慢

从API获取数据后,我解析数据并使用gon将其发送到JavaScript。问题是我不知道如何在页面呈现后获取和设置数据

以下是我的控制器的外观:

def index
  @title = "My Stats"
  if not session.key?(:current_user) then
    redirect_to root_path
  else
    gon.watch.winlossdata = GetMatchHistoryRawData(session[:current_user][:uid32])
  end
end
函数
GetMatchHistoryRawData
是一个帮助函数,它调用GET请求。

使用where gem--(可能,请参见下文)

在呈现页面之前,在队列数据库表中设置一个值。使用监视队列表的“cron”任务(只要gem),可以向Steam API发出请求并填充队列结果表。在呈现的页面上,可以使用AJAX实现JavaScript定期检查,以监视队列结果表,并在API返回结果后填充页面

其他信息:

我还没有用过Everywhere gem,但我对它做了更多的阅读,可能会有一个问题,时间间隔不够短,无法尽可能接近实时。我目前正在用一个实现计时器的Java应用程序处理我的工作,但我想知道是否可以使用where和CRON。因此,任何时候都可能不适合您,但异步处理器执行联系API的工作的想法是我回答的要点。如果来自Steam API的有效负载很小并且返回速度足够快,那么就像上面所说的那样,您可以通过AJAX直接调用控制器,然后再调用Steam API

关于Rails代码,它应该是相当标准的

控制器:

def index
  # Create a Steam API Queue row in the database and save any pertinent information needed for contacting the Steam API
  @unique_id = Model.id  # some unique id created for the Steam API queue row
end

# AJAX calls START
def get_api_result
  # Check for a result using 
  params[:unique_id]
  # render partial for <div>
end
# AJAX calls end
def索引
#在数据库中创建一个Steam API队列行,并保存联系Steam API所需的任何相关信息
@unique_id=Model.id#为Steam API队列行创建的某个唯一id
结束
#AJAX调用开始
def获取api结果
#使用以下命令检查结果:
参数[:唯一的_id]
#使部分
结束
#AJAX调用end
视图:索引

# Display your page     
# Setup an intermittent AJAX call to "controller#get_api_result" with some unique id #{@unique_id} i.e. params[:unique_id] to identify the Steam API Queue table row, populate the result of the call into a <div>
#显示您的页面
#设置对“控制器#获取(api)结果”的间歇AJAX调用,使用一些唯一id#{@unique(id}即params[:unique)id]来标识Steam api队列表行,将调用结果填充到
外部处理器代码(Gem、Java实现、某些作业处理器等)

应提供多个线程来处理Steam API队列表,每隔几秒钟检索一次结果,并填充结果表,当通过AJAX调用请求时,控制器将读取该结果表

要给出这种类型的实现的完整示例需要一些时间,因此我在上面从概念层面简要介绍了它。随着技术的发展,可能还有其他更有效的方法,所以请做一些调查


我希望这是有帮助的

为什么不向您的控制器发出ajax请求,而不是直接向steam api发出请求呢?试过了!成功了。非常感谢。你能举个例子说明这是如何工作的吗?这听起来是个完美的解决方案。