Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将变量从Rails传递到Ajax_Javascript_Jquery_Ruby On Rails_Ruby_Ajax - Fatal编程技术网

Javascript 如何将变量从Rails传递到Ajax

Javascript 如何将变量从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,但它不起作用

我试图用RubyonRails应用程序实现一个进度条(Javascript),但我在将值从controller传递到JS以更新进度条时遇到了问题

最初,我尝试使用一个简单的全局变量($count),但一旦加载,变量总是相同的。它没有在JS端更新

编辑:

现在我使用gon gem传递值。但我只得到第一个值(在控制器启动时设置)。当我调用由按钮单击触发的方法时,值会更新,但变量始终相同。可能是rails/controller中的错误

我看到了一个示例,其中有一个方法将变量公开给gon,但它不起作用

注意:如果我在搜索之前删除初始化,当单击搜索时,JS侧显示“gon变量未定义”

示例代码: 应用程序\u 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

这里有一个宝石,可以帮助你做到这一点。它有大量的解释和例子让你开始


我相信这个链接可以满足您的需求。你不应该需要那颗宝石。你应该只需要做“


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 %>