Javascript 如何将变量从Rails传递到Ajax
我试图用RubyonRails应用程序实现一个进度条(Javascript),但我在将值从controller传递到JS以更新进度条时遇到了问题 最初,我尝试使用一个简单的全局变量($count),但一旦加载,变量总是相同的。它没有在JS端更新 编辑: 现在我使用gon gem传递值。但我只得到第一个值(在控制器启动时设置)。当我调用由按钮单击触发的方法时,值会更新,但变量始终相同。可能是rails/controller中的错误 我看到了一个示例,其中有一个方法将变量公开给gon,但它不起作用 注意:如果我在搜索之前删除初始化,当单击搜索时,JS侧显示“gon变量未定义” 示例代码: 应用程序\u controller.rbJavascript 如何将变量从Rails传递到Ajax,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我试图用RubyonRails应用程序实现一个进度条(Javascript),但我在将值从controller传递到JS以更新进度条时遇到了问题 最初,我尝试使用一个简单的全局变量($count),但一旦加载,变量总是相同的。它没有在JS端更新 编辑: 现在我使用gon gem传递值。但我只得到第一个值(在控制器启动时设置)。当我调用由按钮单击触发的方法时,值会更新,但变量始终相同。可能是rails/controller中的错误 我看到了一个示例,其中有一个方法将变量公开给gon,但它不起作用
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
这里有一个宝石,可以帮助你做到这一点。它有大量的解释和例子让你开始
我相信这个链接可以满足您的需求。你不应该需要那颗宝石。你应该只需要做“
window.productsURL='';
window.products=
非最佳实践方式:
因为您的模板中已经有@count全局值。将其设置为数据属性。然后在javascript中,获取该数据属性。但这是一种反模式。问题似乎与类有关。当Ajax试图访问类控制器内的方法时,它会再次实例化,清除所有变量。 我使用Rails.cache.write(:count,0)和Rails.cache.read(:count)来呈现值,从而解决了这个问题。
提示:不适用于多用户。Rails缓存是在会话之间共享的。我已经尝试过了,但也没有成功。尝试访问js端的变量时出错:“未定义”。您知道错误吗?如何在后端设置gon变量,如何在js端调用它?在controller中,我将其设置为gon.var=50,在js文件中,我尝试获取gon.var。只有这个。我正在使用gon,现在我可以得到第一个值(当控制器启动时)。当搜索按钮单击时,我无法更新特定方法中的值。我认为问题在于方法。如果您能找到问题,请查看新代码。谢谢。正如我在帖子中提到的,可能是控制器的问题。我只能在控制器启动时获取变量的值。当我调用搜索时,变量没有被更新。如果您能找到问题,请查看新代码。谢谢
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();
}
});});
<%= javascript_tag do %>
window.productsURL = '<%= j products_url %>';
window.products = <%= raw Product.limit(10).to_json %>
<% end %>