我的 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”语句为 true 时定义 session 值的正确方法是什么?
谢谢大家。
最佳答案
在服务器上渲染模板时,每个 ruby 代码片段都会被评估。
因此,这些行也会在服务器上执行(每次,不仅是在不是 chrome 浏览器时):
<%= session[:is_chrome] = false %>
<%= Rails.logger.debug = "I made is_chrome false, wtf?" %>
要解决此问题,您可以执行以下操作之一:
- 检查服务器是否是 Chrome 浏览器并进行必要的操作 变化
- 检查客户端是否是 chrome 浏览器并创建 ajax 调用服务器告知有 chrome(或非 chrome) 浏览器
另外放<%= params[:section_id].to_s %>
在引号中(正如用户“infused”也指出的那样):
"<%= params[:section_id].to_s %>"
关于Javascript "if statement"和嵌入式 ruby(ruby 变量始终为 true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535261/