Ruby on rails Rails中的多个GET请求?
我正在开发一个应用程序,在一个页面上,它需要大约12-15个GET请求才能在后台向API发出。我最初的意图是使用jQuery中的AJAX发出请求,但事实证明,使用我正在使用的steamwebapi是不可能做到这一点的 显然,在页面加载之前在Rails控制器中执行此操作非常缓慢 从API获取数据后,我解析数据并使用gon将其发送到JavaScript。问题是我不知道如何在页面呈现后获取和设置数据 以下是我的控制器的外观: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
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发出请求呢?试过了!成功了。非常感谢。你能举个例子说明这是如何工作的吗?这听起来是个完美的解决方案。