当通过Ajax 调用MyController
的foo
方法时,它可能返回如下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/