【问题标题】:Reload on submit form Ajax call重新加载提交表单 Ajax 调用
【发布时间】:2014-05-11 23:30:48
【问题描述】:

我正在使用 form_for @user 提交注册。控制器通常在保存用户以重新加载页面时处理逻辑,但由于某种原因,使用 javascript 和 ajax 在保存和创建新用户时不会重新加载页面。

我假设我需要以某种方式实现此功能以在页面保存后重新加载页面?我一直在搞乱它,但我无法弄清楚仍然正确提交表单但之后还会重新加载页面的任何内容。

我目前已将底部部分注释掉,因此提交按钮现在实际上可以工作,但我无法重新加载页面。我知道有一个函数要重新加载,但我不知道如何将它放在下面的函数中,以便它实际上正确提交页面。

// $(".myform").click(function() {
//     $.ajax({
//        type    : 'POST',
//        url     : '/', // like the "action" path on your form element
//        data    : $("myform").serialize(), // serialize your form data
//        success : function(response){
//            // the form was submitted successfully
//            // so now you can reload with javascript
//             location.reload();
//        }
//     });

//     // stop default behavior of submitting the form
//     return false;
// });

我要提交的表单是:

<%= form_for @user, :remote => true do |f| %>
  <div id="msform">
<!-- multistep form -->
  <!-- progressbar -->
  <ul id="progressbar">
    <li class="active">Part 1</li>
    <li>Part 2</li>
  </ul>
  <!-- fieldsets -->
  <fieldset>
    <h2 class="fs-title">Part 1</h2>
    <h3 class="fs-subtitle">Name/Email/Password</h3>
    <%= f.text_field :username, :placeholder => "Your Name"%><br />
    <%= f.text_field :email, :placeholder => "Email"%>
    <%= f.password_field :password, :placeholder => "Password" %><br />
    <input type="button" name="next" class="next action-button" value="Next" />
  </fieldset>
  <fieldset>
    <h2 class="fs-title">Part 2</h2>
    <h3 class="fs-subtitle">Your site name</h3>
    <%= f.text_field :name, :placeholder => "What do you want to be called?"%><br />
    <input type="button" name="previous" class="previous action-button" value="Previous" />
    <input type="submit" name="submit" class="submit action-button" value="Submit" />
  </fieldset>
</div>
<% end %>

【问题讨论】:

    标签: javascript ruby-on-rails ajax forms ruby-on-rails-4


    【解决方案1】:

    用javascript重新加载当前文档:

    location.reload();
    

    您可以尝试使用 AJAX 执行此操作,以便在尝试刷新之前确保您的表单已提交。

    $("your_form").submit(function() {
        $.ajax({
           type    : 'POST',
           url     : 'some\path', // like the "action" path on your form element
           data    : $("your_form").serialize(), // serialize your form data
           success : function(response){
               // the form was submitted successfully
               // so now you can reload with javascript
               // using location.reload();
           }
        });
    
        // stop default behavior of submitting the form
        return false;
    });
    

    【讨论】:

    • 是的,我有那个部分,但如果我把那个函数保留在那里,它实际上并没有提交表单。我必须将其注释掉才能正常工作。我在这里按照教程进行操作:thecodeplayer.com/walkthrough/…
    • 所以注释掉 return false;不做你想做的事? return false 的目的不就是在表单提交时停止页面的重新加载吗?另外,如果点击函数内部没有任何逻辑,那么拥有它的目的是什么?
    • 我必须注释掉整个 submit.click 函数。以上三行完全。如果我将它们完全注释掉,提交功能将起作用并创建一个新帐户,但它不会像我想要的那样重新加载页面。我假设如果我想让它提交和重新加载,我必须实现那个功能?
    • 你试过把 location.reload() 放在点击里面吗?
    • 所以只返回false;位置重载();甚至没有返回错误?如果我这样做,则不会提交任何表单来创建帐户:/
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2012-10-08
    • 2013-01-09
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多