【问题标题】:How to access the response for a form_tag in rails?如何访问rails中form_tag的响应?
【发布时间】:2016-04-27 09:36:42
【问题描述】:

我有一个在 Db 中提交信息数量的表单。此表单位于模式弹出窗口上。单击提交标签时,将显示一个新的模式弹出窗口,其中有两个按钮单击它们显示表单已提交的数据。 现在的问题是直到控制器调用完成时,这些按钮在点击时什么都不做。 所以我想在单击提交按钮时在表单弹出窗口上添加一个微调器。当响应为真/成功时,它会显示下一个弹出窗口。

我的代码如下所示:

form:

= form_tag("/system/upload_form", method: 'post', enctype:   'multipart/form-data', remote: true) do
    ...
    ...
    =submit_tag("Submit",id: "submit_button", class: 'btn btn-default')  



controller:

sys = @system.update!(system_params)
respond_to do |format|
  format.js
  format.json { render :json => sys }

js:

$("#submit_button").click(function() {
    $('#modal_define_system').modal('hide'); // current popup
    $('#next-page').modal('show'); // next popup
});

现在我想知道如何以及在何处访问从控制器返回的 json 对象或 sys 值。

我试过了: 向表单添加一个类,然后

$('.form_class').bind('ajax:success', function() {
   console.log(sys);
});

但未能成功。请帮助和建议。如果我需要添加更多代码或解释,请发表评论。

【问题讨论】:

    标签: javascript ruby-on-rails ruby json


    【解决方案1】:

    您正在使用form_tagremote true 的表单,它使用js 格式而不是json 发送ajax 请求。如果您在 js 块中呈现 json 响应,而不是像下面这样在控制器中呈现 json,它应该可以工作。

      respond_to do |format|
         format.js { render :json => sys } #this will be rendered 
         format.json { render :json => sys } #this won't
       end
    

    您也可以像这样渲染 javascript 文件

    $('#results_div').html("<%= @system.try(:title) %>")
    

    update.js.erb

    希望这会有所帮助。

    【讨论】:

    • 对不起,如果这听起来很傻,但是我如何在我的 update.js.erb 中访问 sys ?
    • 您可以使用实例变量@system,因为您已经定义了它。
    【解决方案2】:

    扩展maximus的代码,可以使用ajax提交表单,可以 根据您的情况,对您来说更容易。你可以试试

         $("#theForm").ajaxSubmit({url: '/system/upload_form', 
         type: 'post'}).success(function(data){
         $('#newModalContainer').html(data);
         });
    

    然后在您的控制器中,使用您提交的值呈现您想要显示的模态的 html,这些值可以在实例变量中传递。 像

         def upload_form
          #your logic
          render :partial => 'new_modal_to_show'
         end
    

    这是一个通用结构,您可以将其更改为您的相关值。希望它有所帮助:-)

    【讨论】:

    • 这意味着我需要更改我当前的实现??我在表单标签中添加了控制器链接
    • 如果可以的话,为了您的方便... ajax 通过单击提交按钮提交您的表单。并在同一页面上获得响应并在部分中显示。您也可以通过以 js 格式响应并在此处设置变量来寻求解决方案@maximus。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2014-01-09
    • 2011-01-30
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多