jqueryajax提交表单

vq8itlhq  于 2021-09-13  发布在  Java
关注(0)|答案(20)|浏览(793)

我有一张有名字的表格 orderproductForm 和未定义数量的输入。
我想做一些jquery.get或ajax之类的事情,通过ajax调用页面,并发送表单的所有输入 orderproductForm .
我想一种方法是做类似的事情

  1. jQuery.get("myurl",
  2. {action : document.orderproductForm.action.value,
  3. cartproductid : document.orderproductForm.cartproductid.value,
  4. productid : document.orderproductForm.productid.value,
  5. ...

然而,我并不完全知道所有的表单输入。是否有只发送所有表单输入的特性、函数或其他东西?

omjgkv6w

omjgkv6w1#

我知道这是一个 jQuery 相关问题,但现在使用JSES6的日子要容易得多。因为没有纯净的水 javascript 回答,我想我可以加一个简单的纯 javascript 我认为,通过使用 fetch() 应用程序编程接口。这是一种实现网络请求的现代方法。在您的情况下,因为您已经有一个表单元素,所以我们可以简单地使用它来构建我们的请求。

  1. const form = document.forms["orderproductForm"];
  2. const formInputs = form.getElementsByTagName("input");
  3. let formData = new FormData();
  4. for (let input of formInputs) {
  5. formData.append(input.name, input.value);
  6. }
  7. fetch(form.action,
  8. {
  9. method: form.method,
  10. body: formData
  11. })
  12. .then(response => response.json())
  13. .then(data => console.log(data))
  14. .catch(error => console.log(error.message))
  15. .finally(() => console.log("Done"));
展开查看全部
bn31dyow

bn31dyow2#

还有提交事件,它可以像$(“#form_id”).submit()这样触发。如果表单已经用html很好地表示了,那么就应该使用这种方法。您只需阅读页面中的内容,用stuff填充表单输入,然后调用.submit()。它将使用表单声明中定义的方法和操作,因此您无需将其复制到javascript中。
例子

uidvcgyl

uidvcgyl3#

没人提到这件事,我感到很惊讶 data 作为一个对象。对我来说,这是传递数据最干净、最简单的方法:

  1. $('form#foo').submit(function () {
  2. $.ajax({
  3. url: 'http://foo.bar/some-ajax-script',
  4. type: 'POST',
  5. dataType: 'json',
  6. data: {
  7. 'foo': 'some-foo-value',
  8. 'bar': $('#bar').val()
  9. }
  10. }).always(function (response) {
  11. console.log(response);
  12. });
  13. return false;
  14. });

然后,在后端:

  1. // Example in PHP
  2. $_POST['foo'] // some-foo-value
  3. $_POST['bar'] // value in #bar
展开查看全部
oxcyiej7

oxcyiej74#

javascript

  1. (function ($) {
  2. var form= $('#add-form'),
  3. input = $('#exampleFormControlTextarea1');
  4. form.submit(function(event) {
  5. event.preventDefault();
  6. var req = $.ajax({
  7. url: form.attr('action'),
  8. type: 'POST',
  9. data: form.serialize()
  10. });
  11. req.done(function(data) {
  12. if (data === 'success') {
  13. var li = $('<li class="list-group-item">'+ input.val() +'</li>');
  14. li.hide()
  15. .appendTo('.list-group')
  16. .fadeIn();
  17. $('input[type="text"],textarea').val('');
  18. }
  19. });
  20. });
  21. }(jQuery));

html

  1. <ul class="list-group col-sm-6 float-left">
  2. <?php
  3. foreach ($data as $item) {
  4. echo '<li class="list-group-item">'.$item.'</li>';
  5. }
  6. ?>
  7. </ul>
  8. <form id="add-form" class="col-sm-6 float-right" action="_inc/add-new.php" method="post">
  9. <p class="form-group">
  10. <textarea class="form-control" name="message" id="exampleFormControlTextarea1" rows="3" placeholder="Is there something new?"></textarea>
  11. </p>
  12. <button type="submit" class="btn btn-danger">Add new item</button>
  13. </form>
展开查看全部
qpgpyjmq

qpgpyjmq5#

这不是op问题的答案,
但如果不能使用静态表单dom,也可以这样尝试。

  1. var $form = $('<form/>').append(
  2. $('<input/>', {name: 'username'}).val('John Doe'),
  3. $('<input/>', {name: 'user_id'}).val('john.1234')
  4. );
  5. $.ajax({
  6. url: 'api/user/search',
  7. type: 'POST',
  8. contentType: 'application/x-www-form-urlencoded',
  9. data: $form.serialize(),
  10. success: function(data, textStatus, jqXHR) {
  11. console.info(data);
  12. },
  13. error: function(jqXHR, textStatus, errorThrown) {
  14. var errorMessage = jqXHR.responseText;
  15. if (errorMessage.length > 0) {
  16. alert(errorMessage);
  17. }
  18. }
  19. });
展开查看全部
6gpjuf90

6gpjuf906#

如果使用的是form.serialize()-则需要为每个表单元素指定如下名称:

  1. <input id="firstName" name="firstName" ...

表单被序列化如下:

  1. firstName=Chris&lastName=Halcrow ...
kgqe7b3p

kgqe7b3p7#

要避免多次发送formdata,请执行以下操作:
不要忘记取消绑定提交事件,在再次提交表单之前,用户可以多次调用sumbit函数,可能是他忘记了什么,或者是验证错误。

  1. $("#idForm").unbind().submit( function(e) {
  2. ....
s6fujrry

s6fujrry8#

您可以使用下面的提交功能。
HTML表单

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

jquery函数:

  1. <script>
  2. function formSubmit(){
  3. var name = document.getElementById("name").value;
  4. var message = document.getElementById("message").value;
  5. var dataString = 'name='+ name + '&message=' + message;
  6. jQuery.ajax({
  7. url: "submit.php",
  8. data: dataString,
  9. type: "POST",
  10. success: function(data){
  11. $("#myForm").html(data);
  12. },
  13. error: function (){}
  14. });
  15. return true;
  16. }
  17. </script>

有关更多详细信息和样本,请访问:http://www.spiderscode.com/simple-ajax-contact-form/

展开查看全部
5fjcxozz

5fjcxozz9#

考虑使用 closest ```
$('table+table form').closest('tr').filter(':not(:last-child)').submit(function (ev, frm) {
frm = $(ev.target).closest('form');
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: frm.serialize(),
success: function (data) {
alert(data);
}
})
ev.preventDefault();
});

展开查看全部
z4iuyo4d

z4iuyo4d10#

尝试

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

rvpgvaaj11#

您可以使用ajax表单插件中的ajaxform/ajaxsubmit函数或jquery序列化函数。
ajaxform:

  1. $("#theForm").ajaxForm({url: 'server.php', type: 'post'})

  1. $("#theForm").ajaxSubmit({url: 'server.php', type: 'post'})

当按下提交按钮时,ajaxform将发送。ajaxsubmit立即发送。
序列化:

  1. $.get('server.php?' + $('#theForm').serialize())
  2. $.post('server.php', $('#theForm').serialize())

这里有ajax序列化文档。

展开查看全部
ee7vknir

ee7vknir12#

jQueryAjax提交表单,就是在单击按钮时使用表单id提交表单
请遵循以下步骤
步骤1-表单标签必须有一个id字段

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

要单击的按钮

  1. <button>Save</button>

步骤2-提交事件在jquery中,它有助于提交表单。在下面的代码中,我们准备从html元素名发出json请求。

  1. $("#submitForm").submit(function(e) {
  2. e.preventDefault();
  3. var frm = $("#submitForm");
  4. var data = {};
  5. $.each(this, function(i, v){
  6. var input = $(v);
  7. data[input.attr("name")] = input.val();
  8. delete data["undefined"];
  9. });
  10. $.ajax({
  11. contentType:"application/json; charset=utf-8",
  12. type:frm.attr("method"),
  13. url:frm.attr("action"),
  14. dataType:'json',
  15. data:JSON.stringify(data),
  16. success:function(data) {
  17. alert(data.message);
  18. }
  19. });
  20. });

现场演示请点击下面的链接
如何使用jquery ajax提交表单?

展开查看全部
j8yoct9x

j8yoct9x13#

我得到了以下信息:

  1. formSubmit('#login-form', '/api/user/login', '/members/');

哪里

  1. function formSubmit(form, url, target) {
  2. $(form).submit(function(event) {
  3. $.post(url, $(form).serialize())
  4. .done(function(res) {
  5. if (res.success) {
  6. window.location = target;
  7. }
  8. else {
  9. alert(res.error);
  10. }
  11. })
  12. .fail(function(res) {
  13. alert("Server Error: " + res.status + " " + res.statusText);
  14. })
  15. event.preventDefault();
  16. });
  17. }

这假设发送到“url”的帖子以 {success: false, error:'my Error to display'} 你可以随意改变。请随意使用这个片段。

展开查看全部
pdsfdshx

pdsfdshx14#

我非常喜欢superluminary的回答,尤其是他在jquery插件中 Package 解决方案的方式。因此,感谢超光速技术提供了一个非常有用的答案。不过,在我的例子中,我想要一个插件,它允许我在初始化插件时通过选项定义成功和错误事件处理程序。
下面是我的想法:

  1. ;(function(defaults, $, undefined) {
  2. var getSubmitHandler = function(onsubmit, success, error) {
  3. return function(event) {
  4. if (typeof onsubmit === 'function') {
  5. onsubmit.call(this, event);
  6. }
  7. var form = $(this);
  8. $.ajax({
  9. type: form.attr('method'),
  10. url: form.attr('action'),
  11. data: form.serialize()
  12. }).done(function() {
  13. if (typeof success === 'function') {
  14. success.apply(this, arguments);
  15. }
  16. }).fail(function() {
  17. if (typeof error === 'function') {
  18. error.apply(this, arguments);
  19. }
  20. });
  21. event.preventDefault();
  22. };
  23. };
  24. $.fn.extend({
  25. // Usage:
  26. // jQuery(selector).ajaxForm({
  27. // onsubmit:function() {},
  28. // success:function() {},
  29. // error: function() {}
  30. // });
  31. ajaxForm : function(options) {
  32. options = $.extend({}, defaults, options);
  33. return $(this).each(function() {
  34. $(this).submit(getSubmitHandler(options['onsubmit'], options['success'], options['error']));
  35. });
  36. }
  37. });
  38. })({}, jQuery);

这个插件允许我非常轻松地在页面上“ajaxify”html表单,并提供onsubmit、success和error事件处理程序,以实现对用户表单提交状态的反馈。这允许按如下方式使用插件:

  1. $('form').ajaxForm({
  2. onsubmit: function(event) {
  3. // User submitted the form
  4. },
  5. success: function(data, textStatus, jqXHR) {
  6. // The form was successfully submitted
  7. },
  8. error: function(jqXHR, textStatus, errorThrown) {
  9. // The submit action failed
  10. }
  11. });

请注意,成功和错误事件处理程序接收的参数与您从jqueryajax方法的相应事件接收的参数相同。

展开查看全部
xqk2d5yq

xqk2d5yq15#

这段代码甚至可以用于文件输入

  1. $(document).on("submit", "form", function(event)
  2. {
  3. event.preventDefault();
  4. $.ajax({
  5. url: $(this).attr("action"),
  6. type: $(this).attr("method"),
  7. dataType: "JSON",
  8. data: new FormData(this),
  9. processData: false,
  10. contentType: false,
  11. success: function (data, status)
  12. {
  13. },
  14. error: function (xhr, desc, err)
  15. {
  16. }
  17. });
  18. });
展开查看全部

相关问题