根据我在 rails/react 应用程序上的 api 调用状态更新我的视图
Posted
技术标签:
【中文标题】根据我在 rails/react 应用程序上的 api 调用状态更新我的视图【英文标题】:Update my view depending on the status of my api call on a rails/react app 【发布时间】:2019-10-18 00:48:42 【问题描述】:我有一个使用 react 作为前端的 Rails 应用程序。从我的 Rails 控制器中,我正在调用基于浏览器的 api。通过 Watir 和控制器内部的一些“放置”,我可以在终端内获取呼叫状态。例如,在我的终端中,我会看到“Loading 1%...”“Loading 10%”等...直到完成。 我想要做的是向我的前端应用程序显示这个值。对 Rails 很陌生,不知道从哪里开始。为了点击 call_api(username) 方法,我从前端的按钮进行 Ajax 调用。到目前为止,一切都运行良好。我唯一想补充的是我在客户端的通话状态。
我曾尝试使用 gem gon,但问题是我的整个应用程序都基于我的根路由“/”,所以如果我的 index 方法是这样的,而我的 call_api 方法是这样的
def index
@status = "started"
gon.watch.status = @status
end
def call_api(username)
@status = "new value for test"
gon.watch.status = @status
until @status == "Finished"
@status = @browser.span(class: "monoFont").text
puts "status" + @status
sleep 1
end
end
当我进入浏览器控制台并尝试 console.log(gon.status) 时,我仍然会得到“已启动”的值,因为我的应用程序仍在索引路由上。 可能有更好的方法。非常感谢任何有关如何进行的帮助和建议。谢谢
【问题讨论】:
我没完全明白!当您的反应组件确实安装您的值时,您的值已启动,然后在单击按钮并调用 API 后您想要更新值?这是你要做的吗? 为了从我的控制器中使用 API,我需要抓取一个网站。当 API 运行时,使用 watir 并抓取 API 的网站,我得到了一些关于状态的信息(例如“加载 10%”、“加载 20%”等)。此状态信息使用“puts”显示在我的终端中。我想要做的是在我的视图上显示它。让事情变得复杂的是,我使用 ajax 调用来调用控制器方法 (def call_api(username)),所以我能得到的唯一更新是我放入 ajax 成功函数或 ajax 错误函数中的内容。 有没有办法从我的控制器向我的窗口传递一个 js 变量?知道抓取 api 网站的方法不是我显示我的反应前端的索引方法 如果我没记错的话,当 API 在网络上进行一些抓取时,您需要在视图中不断更新状态。所以我认为您可能需要网络套接字或类似的东西? 因为您的 API 一直在运行,并且您需要在视图中进行实时更新。看看网络套接字,让我知道结果。 【参考方案1】:如果我没记错的话,当 API 在网络上进行一些抓取时,您需要在视图中不断更新状态。所以我认为你可能需要 web socketing 或类似的东西,因为你的 API 是连续运行的,你需要在你的视图中进行实时更新。看看网络套接字。
【讨论】:
以上是关于根据我在 rails/react 应用程序上的 api 调用状态更新我的视图的主要内容,如果未能解决你的问题,请参考以下文章
Rails + React 应用程序页面需要重新加载才能呈现 React
无法在 Rails + React App 中验证 CSRF 令牌
Rails + React-I18next:找不到语言环境/