我有一个基本的表单,当提交时,触发一个创建请求到外部API。在提交时,会出现一个包含进度条的阶段值,而不是提交按钮。创建过程需要花费时间在外部API上,因此我必须每秒使用while status == 'inactive'
运行一些Show请求,并在显示请求响应为status: 'active'
时停止。 每个Show请求响应还包含一个'stage'
属性,该属性显示创建过程的阶段(连接,创建,获取,整理等)。对于每个请求,当前阶段都存储在@stage变量中,可以使用ApiRequest.stage
访问该变量。每个API相关的东西都在一个服务文件中。Rails - 用动态变量修改%p的文本
我的CoffeeScript与舞台+进度条更改提交按钮:
$('#new_connection').on 'submit', ->
button = $('#submit_button')
progress = $('.loading')
button.fadeOut 500
setTimeout (->
if button.is(':hidden')
progress.fadeIn 500
return
), 509
return
和部分舞台+进度条:
.loading
%p.center-align#stage <!-- This should display the stage in real time -->
.progress <!-- This is a materializecss progress bar -->
.indeterminate
如何更新内部#stage
文字与ApiRequest.status
每次实时在同一页面上更改值时,从表单提交到结束的那一刻(当所有背景中的所有内容都完成后,它将重定向到create.html)?
在后端一切正常,我不得不每秒都会触发'show'动作,因为每个请求都会返回一个新的'stage'进程。虽然所有内容都在后台运行,但用户可通过进程栏获取进程栏(连接,创建,获取,整理)。随着每一个新的请求,我更新'@舞台'。我想在视图中显示“@ stage”,这样用户就可以知道当时正在发生的事情。这是个问题,'@ stage'不是固定的,它每改变一次'show'请求都会改变它的值,那么我怎样才能用更新后的'@ stage'无刷新更新视图呢? – YoloSnake
AJAX请求完全在后台运行,默认情况下它们不会更新当前显示的页面。如果你的'show'动作返回HTML,你将不得不使用JavaScript自己解析出响应的新状态,并手动更新当前页面上的标签。 –
我唯一的想法是在setInterval函数中触发一个Ajax请求,刷新'@ stage'。不知道如何实现它。 – YoloSnake