我有一个名为orderproductForm的表单和未定义数量的输入。

我想用jQuery。get或ajax或类似的东西会通过ajax调用一个页面,并发送orderproductForm表单的所有输入。

我想有一种方法是

jQuery.get("myurl",
          {action : document.orderproductForm.action.value,
           cartproductid : document.orderproductForm.cartproductid.value,
           productid : document.orderproductForm.productid.value,
           ...

然而,我不知道确切地所有表单输入。是否有一个特性,功能或一些东西,只是发送所有的表单输入?


当前回答

有几件事你需要记住。

1. 有几种提交表单的方法

使用提交按钮 按enter键 通过在JavaScript中触发提交事件 可能更多取决于设备或未来的设备。

因此,我们应该绑定到表单提交事件,而不是按钮单击事件。这将确保我们的代码在现在和未来的所有设备和辅助技术上都能工作。

2. Hijax

用户可能没有启用JavaScript。hijax模式在这里很好,我们使用JavaScript温和地控制表单,但如果JavaScript失败,则保持表单可提交。

我们应该从表单中提取URL和方法,因此如果HTML发生了变化,我们不需要更新JavaScript。

3.低调的JavaScript

使用event. preventdefault()而不是return false是很好的实践,因为它允许事件冒泡。这使得其他脚本可以绑定到事件中,例如可以监视用户交互的分析脚本。

速度

理想情况下,我们应该使用外部脚本,而不是内联插入脚本。我们可以使用脚本标记在页面的头部部分链接到它,或者在页面的底部链接到它,以提高速度。脚本应该悄悄地增强用户体验,而不是妨碍用户体验。

Code

假设你同意上面的所有建议,并且你想要捕获提交事件,并通过AJAX (hijax模式)处理它,你可以这样做:

$(function() {
  $('form.my_form').submit(function(event) {
    event.preventDefault(); // Prevent the form from submitting via the browser
    var form = $(this);
    $.ajax({
      type: form.attr('method'),
      url: form.attr('action'),
      data: form.serialize()
    }).done(function(data) {
      // Optionally alert the user of success here...
    }).fail(function(data) {
      // Optionally alert the user of an error here...
    });
  });
});

你可以手动触发表单提交,只要你喜欢通过JavaScript使用类似的东西:

$(function() {
  $('form.my_form').trigger('submit');
});

编辑:

我最近不得不这样做,最后写了一个插件。

(function($) {
  $.fn.autosubmit = function() {
    this.submit(function(event) {
      event.preventDefault();
      var form = $(this);
      $.ajax({
        type: form.attr('method'),
        url: form.attr('action'),
        data: form.serialize()
      }).done(function(data) {
        // Optionally alert the user of success here...
      }).fail(function(data) {
        // Optionally alert the user of an error here...
      });
    });
    return this;
  }
})(jQuery)

添加一个data-autosubmit属性到你的表单标签,然后你可以这样做:

HTML

<form action="/blah" method="post" data-autosubmit>
  <!-- Form goes here -->
</form>

JS

$(function() {
  $('form[data-autosubmit]').autosubmit();
});

其他回答

Try

fetch(form.action,{method:'post', body: new FormData(form)});

function send(e,form) { fetch(form.action,{method:'post', body: new FormData(form)}); console.log('We submit form asynchronously (AJAX)'); e.preventDefault(); } <form method="POST" action="myapi/send" onsubmit="send(event,this)" name="orderproductForm"> <input hidden name="csrfToken" value="$0meh@$h"> <input name="email" value="aa@bb.com"> <input name="phone" value="123-456-666"> <input type="submit"> </form> Look on Chrome Console > Network after/before 'submit'

另一个类似的使用form元素上定义的属性的解决方案:

<form id="contactForm1" action="/your_url" method="post">
    <!-- Form input fields here (do not forget your name attributes). -->
</form>

<script type="text/javascript">
    var frm = $('#contactForm1');

    frm.submit(function (e) {

        e.preventDefault();

        $.ajax({
            type: frm.attr('method'),
            url: frm.attr('action'),
            data: frm.serialize(),
            success: function (data) {
                console.log('Submission was successful.');
                console.log(data);
            },
            error: function (data) {
                console.log('An error occurred.');
                console.log(data);
            },
        });
    });
</script>

你也可以使用FormData(但在IE中不可用):

var formData = new FormData(document.getElementsByName('yourForm')[0]);// yourForm: form selector        
$.ajax({
    type: "POST",
    url: "yourURL",// where you wanna post
    data: formData,
    processData: false,
    contentType: false,
    error: function(jqXHR, textStatus, errorMessage) {
        console.log(errorMessage); // Optional
    },
    success: function(data) {console.log(data)} 
});

这就是如何使用FormData。

你可以像下面这样在提交函数上使用这个。

HTML表单

<form class="form" action="" method="post">
    <input type="text" name="name" id="name" >
    <textarea name="text" id="message" placeholder="Write something to us"> </textarea>
    <input type="button" onclick="return formSubmit();" value="Send">
</form>

jQuery功能:

<script>
    function formSubmit(){
        var name = document.getElementById("name").value;
        var message = document.getElementById("message").value;
        var dataString = 'name='+ name + '&message=' + message;
        jQuery.ajax({
            url: "submit.php",
            data: dataString,
            type: "POST",
            success: function(data){
                $("#myForm").html(data);
            },
            error: function (){}
        });
    return true;
    }
</script>

详情及样品请访问: http://www.spiderscode.com/simple-ajax-contact-form/

jQuery AJAX提交表单,就是当你点击一个按钮时使用表单ID提交一个表单

请按步骤操作

步骤1 -表单标签必须有一个ID字段

<form method="post" class="form-horizontal" action="test/user/add" id="submitForm">
.....
</form>

按钮,你要点击

<button>Save</button>

第2步-提交事件是在jQuery中帮助提交表单。在下面的代码中,我们从HTML元素名准备JSON请求。

$("#submitForm").submit(function(e) {
    e.preventDefault();
    var frm = $("#submitForm");
    var data = {};
    $.each(this, function(i, v){
        var input = $(v);
        data[input.attr("name")] = input.val();
        delete data["undefined"];
    });
    $.ajax({
        contentType:"application/json; charset=utf-8",
        type:frm.attr("method"),
        url:frm.attr("action"),
        dataType:'json',
        data:JSON.stringify(data),
        success:function(data) {
            alert(data.message);
        }
    });
});

现场演示点击下面的链接

如何使用jQuery AJAX提交表单?