从javascript调用rails动作

时间:2011-08-26 19:49:08

标签: javascript ruby-on-rails

我有一个场景需要在新窗口中显示表单预览。

我被困在如何从javascript函数调用rails动作预览以及如何为该动作启动新窗口。

以下是代码:

click preview link code:

<%= link_to_function "#{image_tag('preview.png', :alt=>'Preview', :title=>'See a preview')}
<span class='text'>Preview</span>",
 "javascript:show_form()" %>

javascript function:

function show_form() {
    //grab the dom
      var html = $('#newform').clone();
    //whats next here?????
}

 rails action:

 def preview
    @html = params[:html]
 end

我的问题是:

  • 如何调用rails操作预览?
  • 如何使用该操作的预览启动新窗口?

感谢您的帮助

Edit:

我可以使用来自jquery的$ .post('/ url')发布数据。但是,视图未呈现。我可以看到正在调用视图(调试命中断点)但浏览器不会渲染它。在.post()方法中我需要做什么来路由到新的URL吗?

1 个答案:

答案 0 :(得分:3)

由于你正在使用jQuery,你也可以使用它的AJAX库:http://api.jquery.com/category/ajax/

在大多数情况下,使用$.get()$.post()就足够了。您可以使用$.ajax()获得更大的灵活性,但必须输入更多选项。

基本上,您的目标是调用映射到相应控制器操作的URL。该操作应返回具有适当HTML,XML或JSON的视图。如果它只返回表单的HTML,您可以在结果上使用jQuery来获取适当的值并执行您需要的操作。

修改

AJAX调用采用成功的回调函数,您可以提供实际渲染表单。

示例:

$.post('/url', function (data) {
    $('#myForm').html(data); // this would simply inject the returned HTML into the form
});

编辑(再次):

重新阅读您的问题。似乎你试图在新窗口中呈现所有内容?假设您的视图呈现整个HTML块(使用DOCTYPE和<html>),您可以使用window.open并指定URL。在这种情况下,您根本不需要AJAX。