【问题标题】:Cannot access Rails variable inside Javascript tag无法访问 Javascript 标记内的 Rails 变量
【发布时间】:2017-11-12 18:50:01
【问题描述】:

stackoverflow 中的所有其他解决方案似乎都不适合我,所以我发布我的代码以寻求帮助。我想通过 jquery 输出变量:@less_per_unit

这是我在 _form.html.erb 中的标签:

<script>
$(document).on('keyup', ".input-quantity", function(){ 
  $.ajax({
      url:  "/so_check_increment",
      type: "GET",
      data: { quantity: $(this).val(), product_id: $(this).closest('tr').find('.input-product_code').val()}
  }); 
    $(this).closest('td').next('td').find('.increment').text('<%== j @less_per_unit%>');
}); 
</script>

这是我的控制器:

  def check_increment
    @less_per_unit = "testing"
  end

我知道 ajax 有效,我也设置了路线。如果我尝试 binding.pry,我知道 rails 可以找到 @less_per_unit,但我无法使用 javascript 输出它。

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax


    【解决方案1】:

    这不起作用,因为:

    假设这个表单是在控制器“发布”的“新”动作中呈现的,那么@less_per_unit 需要在那里初始化,以便在您正在使用的那个动作的视图文件中使用它。当您使用 AJAX 调用时,在该调用期间,您正在定义一个实例变量,已呈现的 html 文件肯定无法访问该变量。

    因此,您需要从您的 check_increment 操作中返回 JSON 数据,并在 AJAX 调用响应中接收该数据,然后使用它。

    【讨论】:

    • 实际上 j 是“escape javascript”的 rails 代码。我从与我类似的其他堆栈溢出问题中了解到这一点。我尝试删除多余的 = 和 j 但它仍然不起作用。
    • 好的。我不知道。但是为什么要额外的'='。根据文档,&lt;%= j @less_per_unit %&gt; 应该可以正常工作。
    • 我试过了,但它仍然没有显示任何价值。我也试过 console.log('') 。没有运气。
    • 这不是很明显吗?原因是:假设这个表单是在控制器“xyz”的“新”动作中呈现的,那么@less_per_unit 需要在那里初始化,以便在您正在使用的那个动作的视图文件中使用它。当您使用 AJAX 调用时,在该调用期间,您正在定义一个实例变量,已经呈现的 html 文件肯定无法访问该变量。
    • 那么,您是否已经基本了解为什么您的代码不能更早地工作了?我希望你已经阅读了解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多