【问题标题】:submit form in Rails without page reload在 Rails 中提交表单而无需重新加载页面
【发布时间】:2015-10-06 13:31:31
【问题描述】:

我在提交表单时遇到了阻止页面重新加载的问题。

我的 HTML:

<%= form_for @foo, html: {multipart: true}, remote: true do |f| %>
   <%= f.check_box :bar, :id => "bar_id", :onchange => "submit_function(this.form)" %>
<% end %>

我的 Javascript:

function submit_function(form){
    form.submit(function (ev) {
        ev.preventDefault();
    });
}

我的控制器:

def update

   // awesome things for update

   respond_to do |format|
     format.html { redirect_to request.referrer }
     format.js {}
   end
end

当点击复选框时,JavaScript 被触发。 “form.submit”将表单发送到控制器,但在这种情况下,整个页面都被重新加载。我想防止这种重新加载。

我也试过了,但是页面也重新加载了。

function submit_function(form){
  form.submit(function () {
    $.ajax({
        type: this.method,
        url: this.action,
        data: $(this).serialize()
    });
    return false;
  });
}

“提交-功能”之前是否需要更改,还是通过按下复选框来更改?

我现在尝试了一些东西。现在邀请页面不再是新的,但模型已更新。

function submit_function(form) {

  $.ajax({
    type: form.method,
    url: form.action,
    data: $(form).serialize()
  });

  return false;
}

现在我在更新已更改的部分时遇到了问题。 js如何做到这一点?

好的,我明白了。请求将以js发送,不再触发页面重新加载。使用 javascript 我已经编辑了复选框。

【问题讨论】:

    标签: javascript ruby-on-rails ruby page-refresh preventdefault


    【解决方案1】:

    好像和这个情况很相似:AJAX rails check box using javascript .submit()

    他们所做的是重新定义表单提交,改变行为。

    作为一个基本建议:使用相当不显眼的 JS,而不是内联 onchange 事件

    【讨论】:

    • 如果我试试这个:-> function submit_function(form){ form.submit(function () { $.ajax({ type: this.method, url: this.action, data: $( this).serialize() }); return false; }); } ...在javascript中,它也在重新加载
    • development.log 是怎么说的?像“将 MyController#update 处理为 HTML”?还是“作为 JS”?
    • 如果我选择它作为“HTML”发送的复选框。因此它会触发控制器中的“redirect_to request.referrer”。我怎样才能对 'js' 做到这一点?
    • 据此:alfajango.com/blog/…,如果将format.js移到format.html之前,控制器必须在js中响应。或者您必须在请求中明确设置 dataType。不确定,没有尝试过,但可能值得在你身边尝试:)
    • 删除 format.html 会导致 ActionController::UnknownFormat ...但我尝试了另一件事..见上文
    猜你喜欢
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多