javascript - rails 3 : How to send Javascript code from Controller?

标签 javascript ruby-on-rails ruby-on-rails-3

当通过Ajax 调用MyControllerfoo 方法时,它可能返回如下Javascript 代码:

class MyController < ApplicationController
  def foo
    render :js => "alert('Hello');"
  end
end

foo 被正常调用(不是通过 Ajax)时,是否有可能做类似返回 Javascript 代码的事情?我会做这样的事情:

class Job < ApplicationController
  def edit
    if user_type == 'demo'
      [Here I would like to display a Javascript alert saying that 
       the job cannot be edited in demo mode. How would you do this?]
    else
      @job = Job.find(params[:id])
    end
  end
end

最佳答案

简短的回答是:你不能。

当您为 :js 渲染时,调用代码是一个 javascript 框架,它知道它请求了 js,并将执行返回的代码以使其在异步调用执行它的 onSuccess 操作时生效。

当默认渲染时,调用代码是期望 html 的浏览器,它不会执行纯 js。

您可以做的是让您的 View 在开始时返回带有一些 javascript 的 html,并定义一个 window.onload() 处理程序以使其显示警报。但是您仍然必须返回 html(如果您不想显示数据,请使用特定参数将其重定向到先前的 View 模板,以便 View 将具有事件处理程序) (https://stackoverflow.com/questions/1033398/execute-javascript-when-page-has-fully-loaded)

您还可以更改调用编辑操作的事件处理程序,甚至在操作执行之前就显示警报。为了防止用户禁用 js 并克服警报,您仍然需要检查 user_type 并且可能只是重定向到上一页。

关于javascript - rails 3 : How to send Javascript code from Controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472227/

相关文章:

javascript - 为什么 vanilla HTML/JS(和 React)使用驼峰式命名,而 CSS 不使用?

javascript - 如何从 Java 编译并运行 Typescript?

ruby-on-rails - 即使有一个零,我怎么还能做 gsub?

ruby-on-rails - 在 .bashrc 或 .bash_profile 中设置环境变量

ruby-on-rails - 通过传递变量从 ruby​​ on rails 执行 shell 脚本

javascript - 使用 js 助手将数据发送到 Controller

javascript - 如何使 map 超出图层边界?

ruby-on-rails - 渲染部分时出现未定义方法错误

ruby-on-rails-3 - PHPBB 身份验证 + Rails

ruby-on-rails - 如何将域添加到 heroku 中的 Rails 应用程序