我的目标结果是当用户点击链接时,弹出一个覆盖图,其中包含使用AJAX从服务器加载的新页面。
我这样做的方法是使用Prototype Overlay(我使用Prototype for AJAX)来创建对话框,在创建对话框后,我正在调用:
new Ajax.Updater("div_inside_the_dialog",
"url_for_the_content",
{method: 'get', requestHeaders:{Accept:'text/javascript'}});
我也加入了我的url_for_the_content控制器:
respond_to do |format|
format.js
format.html
end
因此,当单击链接时,它会创建一个对话框,我的url_for_the_content控制器,它会看到我正在发出JavaScript请求,并返回一些内容显示在对话框中。
它运行正常,但我觉得非常奇怪,我必须手动编码,我正在寻找请求标头中的JavaScript返回,然后我返回的实际上不是JavaScript,它只是一堆对话框的HTML。
另一方面,我不想仅仅为此创建一个特殊的控制器方法,因为它在概念上并不是真正的动作,因为它显示的内容与现有动作相同,只是格式不同。此外,我必须禁用它的布局,我绝不希望用户能够直接访问它,而不是在AJAX对话框中。
任何人都可以提供有关我如何接近整个过程的任何反馈,我正在做的任何部分?
答案 0 :(得分:1)
我对你调用Ajax的方式不太熟悉,但我更喜欢简单地通过Ajax渲染表单,这也应该清楚地说明为什么你会在请求标题中的Javascript返回请求中手动编码。我通常这样做的方法是将js.erb文件保存在与您的控制器名称对应的views文件夹中。所以在Views /(Controller_Name)/我有一个名为(Action_Name).js.erb的文件,它看起来如下:
$("div_to_update").update("<%= escape_javascript(render('updateform')) %>")
只需这样就可以使用AJAX调用任何您想要的表单。类似地,类似的东西允许您以任何必要的方式简单地更新您需要的任何内容。希望这有帮助