我正在尝试使用 Ruby on Rails 应用程序实现进度条 (Javascript),但我无法将值从 Controller 传递到 JS 以更新进度条。
最初,我尝试使用一个简单的全局变量 ($count),但一旦加载,该变量始终相同。 JS端没有更新。
编辑:
现在我正在使用 gon gem 来传递值。但我只得到第一个值(在 Controller 启动时设置)。当我调用由单击按钮触发的方法时,值会更新,但 gon 变量始终相同。也许是 rails/controller 中的错误?
我看到了一个示例,其中包含一种将变量公开给 gon 的方法,但它不起作用。
注意:如果我去掉搜索前的初始化if,点击搜索时JS端显示“gon variable undefined”
示例代码: application_controller.rb
def application
@count =0 #gon assumes only this value
exposeUnProcessedJobToJavascript
if params[:search]
while(@count < 10)
exposeUnProcessedJobToJavascript
sleep 3
@count +=1
end
end
def exposeUnProcessedJobToJavascript
gon.watch.job = @count
end
end
应用程序.js.erb
function addJobWatchers() {
if (gon.job != undefined) {
gon.watch('job', {
interval: 1000
}, updateProcessingJob);
}
}
function updateProcessingJob(job) {
if (job) {
console.log("JOB: " + job);
}
}
$(document).on('page:change', function() {
$("#search_button").click(function() {
console.log("click search");
if (typeof gon !== 'undefined') {
addJobWatchers();
}
});});
最佳答案
这里有一个 gem 可以帮助您做到这一点。它有大量的解释和示例来帮助您入门。
关于javascript - 如何将变量从 Rails 传递到 Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711516/