【问题标题】:Javascript "if statement" and embedded ruby (ruby variable always true)Javascript“if 语句”和嵌入式 ruby​​(ruby 变量始终为真)
【发布时间】:2014-12-19 13:03:59
【问题描述】:

我的 html.erb 中有这样的脚本:

if(browser == "Firefox") {
  $(".browser-warning").show();
}

else if(browser == "Safari") {
  if(browser.version < 6) {
    $(".browser-warning").show();
  }
}

else if((BrowserDetect.browser != "Chrome") && (<%= params[:section_id].to_s %> != '')) {
  console.log('yo');
  <%= session[:is_chrome] = false %>
  <%= Rails.logger.debug = "I made is_chrome false, wtf?" %>
}

else {
  $(".browser-warning").show();
}

我正在从 Chrome 浏览器运行此脚本并且条件返回 false

session[:is_chrome] 总是变为 false 并且 Rails 记录器返回“我将 is_chrome 设为 false,wtf?”。 但。 JS 控制台记录器不在控制台中打印“yo”。 为什么会这样,只有当 JS “if” 语句为真时才定义会话值的正确方法是什么?

谢谢大家。

【问题讨论】:

  • 您是否尝试根据客户端上的值评估服务器上的某些内容?
  • @Mathletics 是的,我是。
  • 是的,你不能那样做,你知道吗?因为在浏览器中运行 JS 时,Ruby 已经在服务器上进行了评估。

标签: javascript ruby-on-rails ruby conditional-statements


【解决方案1】:

在渲染模板时在服务器上对每个 ruby​​ sn-p 进行评估。
因此,这些行也会在服务器上执行(每次,不仅是在不是 chrome 浏览器的情况下):

<%= session[:is_chrome] = false %>
<%= Rails.logger.debug = "I made is_chrome false, wtf?" %>

要解决此问题,您可以执行以下操作之一:

  • 检查服务器是否为 chrome 浏览器并进行必要的 变化
  • 检查客户端是否是 chrome 浏览器并制作 ajax 调用服务器通知有 chrome(或非 chrome) 浏览器


另外将&lt;%= params[:section_id].to_s %&gt; 放在引号中(正如用户“infused”所说):

"<%= params[:section_id].to_s %>"

【讨论】:

    【解决方案2】:

    您需要了解 Rails 在将 erb 发送到浏览器之前会对其进行渲染,并且在 javascript 运行其代码时没有 erb 语句。另外,rails在渲染文件的时候,会把所有没有被包围的都当作纯文本,所以两者都是

    <%= session[:is_chrome] = false %>
    <%= Rails.logger.debug = "I made is_chrome false, wtf?" %>
    

    总是被执行,不管它们周围写的是什么类型的 javascript 代码。

    如果你想在客户端执行一些服务器端代码,唯一的方法是发送另一个请求(通过 Ajax,简单的选项),或者使用 socketIO 来启用客户端-服务器通信(从来没有这样做过我自己:()

    但是,您尝试实现的目标可以在服务器端严格实现:看看this question

    【讨论】:

      【解决方案3】:

      您需要在 Ruby 输出周围加上引号:

      "<%= params[:section_id].to_s %>"
      

      【讨论】:

        猜你喜欢
        • 2018-01-01
        • 2012-03-07
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 2021-01-07
        • 2013-03-22
        • 2019-10-05
        相关资源
        最近更新 更多