【问题标题】:Submit form without reloading page through AJAX通过 AJAX 提交表单而不重新加载页面
【发布时间】:2012-08-06 14:54:32
【问题描述】:

有什么方法可以在不重新加载页面的情况下将表单提交到服务器以获得 AJAX 响应。我可以使用提交按钮来做到这一点。但是当一个链接被点击时,我该怎么做呢。

我知道了一种 javascript 方法可以做到这一点,

var form = document.getElementById('myForm');
form.submit();

但是上面的代码会重新加载页面。我知道我们可以用 jquery 来做到这一点,但是如何呢?

请注意,我正在使用 Ruby on Rails 3.0.4 开发我的应用程序,并且我正在使用这样的 Rails AJAX。

<%= form_for @search, :remote => true, :url => request_path, :html => {:method => :get, :id => :my_form} do |f| %>

任何帮助将不胜感激。

【问题讨论】:

  • 也许您应该将event.preventDefault(); 语句放在提交处理程序中以防止默认页面刷新。

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

你可以使用event对象的preventDefault()方法:

$('#myForm').submit(function(event){
   event.preventDefault(); 
   $.ajax({
     ...
   });
})

如果调用此方法,则不会触发事件的默认动作。

【讨论】:

    【解决方案2】:

    您可以使用.post() 进行 ajax 发布。

    取自文档:

    $.ajax({
      type: 'POST',
      url: url,
      data: data,
      success: success,
      dataType: dataType
    });
    

    你也可以使用.submit()

    取自文档:

    $('#target').submit(function() {
      alert('Handler for .submit() called.');
      return false;
    });
    

    现在,当提交表单时,会发出警告消息。有时候是这样的 在实际提交之前,所以我们可以取消提交动作 在事件对象上调用 .preventDefault() 或返回 false 来自我们的处理程序。

    你可以像Raminson显示的那样组合2:

    $('#target').submit(function() {
        .preventDefault()
        $.ajax({
            type: 'POST',
            url: url,
            data: data,
            success: success,
            dataType: dataType
        });
    });
    

    【讨论】:

    • 您的第二个选项非常适合我。我刚刚编写了您提供的解决方案的一部分,即'$('#target').submit(); 不知道如何,但它只是按照我想要的方式为我工作。无需致电.preventDefault().
    【解决方案3】:

    我知道我参加聚会有点晚了,作为上述答案的替代方案,您可以使用 jQuery Form plugin 轻松更新 ajax 表单。

    如果你使用它,你的 JS 代码最简单的版本应该是这样的。

    $('#myform').ajaxForm(function() { 
      success: alert('success');
    });
    

    您可以使用更多选项来配置它。 表单提交到的 url 与表单的 action 属性相同。

    这也可以更改。

    根据我的经验,您也不需要preventDefault() 提交,它会为您完成。

    无论如何,如果您觉得方便,这是您问题的另一种选择。

    【讨论】:

      【解决方案4】:

      如果问题是您的页面使用 form.submit() 重新加载,请尝试:

      var form = document.getElementById('myForm');
      form.submit(function(e){
      
          e.preventDefault();
      
          //an ajax post as in François Wahl answer
      
      });
      

      【讨论】:

        【解决方案5】:

        我仅使用此代码就可以正常工作。无需在 submit 中定义函数。

        $('#myform').submit();
        

        【讨论】:

        • 正确答案是来自 François Wahl 的答案,这个答案完全是错误的,而且绿色检查具有误导性。你能把绿色的勾去掉吗?
        猜你喜欢
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 2013-10-14
        • 2017-09-19
        相关资源
        最近更新 更多