jQuery AJAX submit form

Saya punya form dengan nama orderproductForm dan terdefinisi jumlah input.

Saya ingin melakukan beberapa jenis jQuery.mendapatkan atau ajax atau sesuatu seperti itu yang akan memanggil halaman melalui Ajax, dan mengirim bersama semua input dari form orderproductForm.

Saya kira salah satu cara untuk melakukan sesuatu seperti

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

Namun saya tidak tahu persis semua form input. Apakah ada fitur, fungsi atau sesuatu yang hanya akan mengirim SEMUA form input?

Ini adalah referensi sederhana:

// this is the id of the form
$("#idForm").submit(function(e) {

    e.preventDefault(); // avoid to execute the actual submit of the form.

    var form = $(this);
    var url = form.attr('action');

    $.ajax({
           type: "POST",
           url: url,
           data: form.serialize(), // serializes the form's elements.
           success: function(data)
           {
               alert(data); // show response from the php script.
           }
         });

});

Saya berharap hal ini membantu anda.

Komentar (20)
Larutan

Anda dapat menggunakan ajaxForm/ajaxSubmit fungsi dari Ajax Form Plugin atau jQuery cerita bersambung fungsi.

AjaxForm:

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

atau

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

ajaxForm akan mengirimkan ketika tombol submit ditekan. ajaxSubmit mengirimkan segera.

Cerita bersambung:

$.get('server.php?' + $('#theForm').serialize())

$.post('server.php', $('#theForm').serialize())

AJAX serialisasi dokumentasi di sini.

Komentar (9)

Lain yang serupa solusi menggunakan atribut yang didefinisikan pada bentuk elemen:





<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>
Komentar (4)

Ada beberapa hal yang perlu anda perhatikan.

1. Ada beberapa cara untuk mengirimkan formulir

  • menggunakan tombol kirim
  • dengan menekan enter
  • dengan memicu submit event di JavaScript
  • mungkin lebih tergantung pada perangkat atau masa depan perangkat.

Oleh karena itu kita harus mengikat kirim formulir acara, bukan klik tombol acara. Ini akan memastikan kode kita bekerja pada semua perangkat dan teknologi pendukung, sekarang dan di masa depan.

2. Hijax

Pengguna mungkin tidak memiliki JavaScript diaktifkan. A hijax pola lebih baik di sini, di mana kita lembut mengambil kendali dari form menggunakan JavaScript, tapi biarkan submittable jika JavaScript gagal.

Kita harus menarik URL dan metode dari bentuk, sehingga jika perubahan HTML, kita don't perlu memperbarui JavaScript.

3. JavaScript

Menggunakan acara tersebut.preventDefault() bukan return false adalah praktik yang baik karena memungkinkan acara untuk bubble up. Hal ini memungkinkan skrip lain dasi ke acara tersebut, misalnya analytics script yang dapat memantau interaksi pengguna.

Kecepatan

Kita idealnya harus menggunakan skrip eksternal, daripada memasukkan script kami inline. Kita dapat link ini pada bagian head dari halaman menggunakan tag script, atau link untuk itu di bagian bawah halaman untuk kecepatan. Naskah harus diam-diam meningkatkan pengalaman pengguna, tidak mendapatkan di jalan.

Kode

Dengan asumsi anda setuju dengan semua hal di atas, dan anda ingin menangkap menyerahkan acara, dan menanganinya melalui AJAX (a hijax pola), anda bisa melakukan sesuatu seperti ini:

$(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...
    });
  });
});

Anda dapat secara manual memicu formulir pengajuan kapanpun yang anda suka melalui JavaScript menggunakan sesuatu seperti:

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

Edit:

Baru-baru ini saya telah melakukan ini dan akhirnya menulis sebuah plugin.

(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)

Tambahkan data-autosubmit atribut untuk tag form dan anda kemudian dapat melakukan hal ini:

HTML



JS

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

Anda juga dapat menggunakan FormData (Tetapi tidak tersedia di 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)} 
});

Ini adalah cara yang anda gunakan FormData.

Komentar (4)

Versi sederhana (tidak mengirim gambar)


...

<script>
    (function($){
        $("body").on("submit", ".my-form", function(e){
            e.preventDefault();
            var form = $(e.target);
            $.post( form.attr("action"), form.serialize(), function(res){
                console.log(res);
            });
        });
    )(jQuery);
</script>

Copy dan paste ajaxification dari bentuk atau semua bentuk pada halaman

Ini adalah versi modifikasi dari Alfrekjv's jawaban

  • Itu akan bekerja dengan jQuery >= 1.3.2
  • Anda dapat menjalankan ini sebelum dokumen siap
  • Anda dapat menghapus dan re-menambahkan form dan masih akan bekerja
  • Itu akan posting ke lokasi yang sama sebagai bentuk normal, yang ditentukan dalam bentuk's "tindakan" atribut

JavaScript

jQuery(document).submit(function(e){
    var form = jQuery(e.target);
    if(form.is("#form-id")){ // check if this is the form that you want (delete this check to apply this to all forms)
        e.preventDefault();
        jQuery.ajax({
            type: "POST",
            url: form.attr("action"), 
            data: form.serialize(), // serializes the form's elements.
            success: function(data) {
                console.log(data); // show response from the php script. (use the developer toolbar console, firefox firebug or chrome inspector console)
            }
        });
    }
});

Saya ingin mengedit Alfrekjv's jawaban tetapi menyimpang terlalu jauh dari itu sehingga memutuskan untuk posting ini sebagai jawaban yang terpisah.

Tidak mengirim berkas, tidak mendukung tombol, misalnya mengklik suatu tombol (termasuk tombol kirim) mengirimkan nilai sebagai data formulir, tapi karena ini adalah permintaan ajax tombol klik tidak akan dikirim.

Untuk mendukung tombol anda dapat menangkap aktual klik tombol alih-alih menyerahkan.

jQuery(document).click(function(e){
    var self = jQuery(e.target);
    if(self.is("#form-id input[type=submit], #form-id input[type=button], #form-id button")){
        e.preventDefault();
        var form = self.closest('form'), formdata = form.serialize();
        //add the clicked button to the form data
        if(self.attr('name')){
            formdata += (formdata!=='')? '&':'';
            formdata += self.attr('name') + '=' + ((self.is('button'))? self.html(): self.val());
        }
        jQuery.ajax({
            type: "POST",
            url: form.attr("action"), 
            data: formdata, 
            success: function(data) {
                console.log(data);
            }
        });
    }
});

Pada sisi server, anda dapat mendeteksi ajax request dengan header yang jquery set HTTP_X_REQUESTED_WITH untuk php

PHP

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    //is ajax
}
Komentar (2)

Kode ini bekerja bahkan dengan file input

$(document).on("submit", "form", function(event)
{
    event.preventDefault();        
    $.ajax({
        url: $(this).attr("action"),
        type: $(this).attr("method"),
        dataType: "JSON",
        data: new FormData(this),
        processData: false,
        contentType: false,
        success: function (data, status)
        {

        },
        error: function (xhr, desc, err)
        {

        }
    });        
});
Komentar (3)

Aku benar-benar menyukai jawaban ini oleh superluminary dan terutama cara dia dibungkus adalah solusi dalam jQuery plugin. Jadi terima kasih untuk superluminary untuk waktu yang sangat berguna menjawab. Dalam kasus saya, meskipun, saya ingin sebuah plugin yang akan memungkinkan saya untuk menentukan sukses dan kesalahan event handler dengan cara pilihan ketika plugin diinisialisasi.

Jadi di sini adalah apa yang saya datang dengan:

;(function(defaults, $, undefined) {
    var getSubmitHandler = function(onsubmit, success, error) {
        return function(event) {
            if (typeof onsubmit === 'function') {
                onsubmit.call(this, event);
            }
            var form = $(this);
            $.ajax({
                type: form.attr('method'),
                url: form.attr('action'),
                data: form.serialize()
            }).done(function() {
                if (typeof success === 'function') {
                    success.apply(this, arguments);
                }
            }).fail(function() {
                if (typeof error === 'function') {
                    error.apply(this, arguments);
                }
            });
            event.preventDefault();
        };
    };
    $.fn.extend({
        // Usage:
        // jQuery(selector).ajaxForm({ 
        //                              onsubmit:function() {},
        //                              success:function() {}, 
        //                              error: function() {} 
        //                           });
        ajaxForm : function(options) {
            options = $.extend({}, defaults, options);
            return $(this).each(function() {
                $(this).submit(getSubmitHandler(options['onsubmit'], options['success'], options['error']));
            });
        }
    });
})({}, jQuery);

Plugin ini memungkinkan saya untuk sangat mudah "ajaxify" bentuk html pada halaman dan memberikan onsubmit, sukses dan kesalahan event handler untuk menerapkan umpan balik kepada pengguna tentang status kirim formulir. Hal ini memungkinkan plugin yang akan digunakan sebagai berikut:

 $('form').ajaxForm({
      onsubmit: function(event) {
          // User submitted the form
      },
      success: function(data, textStatus, jqXHR) {
          // The form was successfully submitted
      },
      error: function(jqXHR, textStatus, errorThrown) {
          // The submit action failed
      }
 });

Perhatikan bahwa sukses dan kesalahan event handler menerima argumen yang sama yang anda akan menerima dari kejadian yang sesuai dari jQuery ajax metode.

Komentar (0)

Saya punya berikut untuk saya:

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

mana

function formSubmit(form, url, target) {
    $(form).submit(function(event) {
        $.post(url, $(form).serialize())
            .done(function(res) {
                if (res.success) {
                    window.location = target;
                }
                else {
                    alert(res.error);
                }
            })
            .fail(function(res) {
                alert("Server Error: " + res.status + " " + res.statusText);

            })
        event.preventDefault();
    });
}

Ini mengasumsikan posting ke 'url' kembali ajax dalam bentuk {sukses: palsu, error:&#39;Kesalahan saya untuk menampilkan&#39;}

Anda dapat bervariasi ini seperti yang anda suka. Merasa bebas untuk menggunakan cuplikan.

Komentar (1)

jQuery AJAX submit form, tidak lain adalah submit form menggunakan form ID ketika anda klik pada tombol

Silakan ikuti langkah-langkah

Langkah 1 - tag Form harus memiliki sebuah field ID


.....

Tombol yang anda klik

Save

Langkah 2 - kirim event di jQuery yang membantu untuk mengirimkan formulir. dalam kode di bawah ini kami sedang mempersiapkan JSON permintaan dari elemen HTML ****nama.

$("#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);
        }
    });
});

untuk live demo klik pada link di bawah ini

[Cara submit Form menggunakan jQuery AJAX?][1]

Komentar (0)

pertimbangkan untuk menggunakan terdekat

$('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();
    });
Komentar (0)

Untuk menghindari beberapa formdata mengirimkan:

Don't lupa untuk melepaskan menyerahkan acara, sebelum menyerahkan formulir lagi, Pengguna dapat memanggil menyerahkan fungsi lebih dari satu kali, mungkin dia lupa sesuatu, atau kesalahan validasi.

 $("#idForm").unbind().submit( function(e) {
  ....
Komentar (0)

Jika anda're menggunakan formulir**.cerita bersambung() - anda perlu untuk memberikan setiap elemen form nama seperti ini:

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

Dan bentuk menjadi serial seperti ini:

firstName=Chris&lastName=Halcrow ...
Komentar (0)

Anda dapat menggunakan ini di submit fungsi seperti di bawah ini.

Form HTML


    <input type="text" name="name" id="name" >
    <textarea name="text" id="message" placeholder="Write something to us"> 

fungsi 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>

Untuk rincian lebih lanjut dan sampel Kunjungi: http://www.spiderscode.com/simple-ajax-contact-form/

Komentar (0)

Ini bukan jawaban untuk OP's pertanyaan, tapi dalam kasus jika anda dapat't menggunakan bentuk statis DOM, anda juga dapat mencoba seperti ini.

var $form = $('').append(
    $('<input/>', {name: 'username'}).val('John Doe'),
    $('<input/>', {name: 'user_id'}).val('john.1234')
);

$.ajax({
    url: 'api/user/search',
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    data: $form.serialize(),
    success: function(data, textStatus, jqXHR) {
        console.info(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        var errorMessage = jqXHR.responseText;
        if (errorMessage.length > 0) {
            alert(errorMessage);
        }
    }
});
Komentar (0)

Hanya pengingat bahwa data yang dapat menjadi obyek, terlalu:

`` $('bentuk#foo').submit(function () { $.ajax({ url: 'http://foo.bar/some-ajax-script&#39;, jenis: 'POST', dataType: 'json', data: { 'foo': 'beberapa-foo', 'bar': 'beberapa bar' } }).selalu(function (data) { konsol.log(data); });

return false; }); ``

Komentar (0)

Saya tahu ini adalah jQuery terkait pertanyaan, tapi sekarang hari-hari dengan JS ES6 hal-hal yang jauh lebih mudah. Karena tidak ada yang murni javascript menjawab, saya pikir saya bisa menambahkan sederhana murni javascript solusi untuk ini, yang menurut saya jauh lebih bersih, dengan menggunakan fetch() API. Ini cara modern untuk mengimplementasikan jaringan permintaan. Dalam kasus anda, karena anda sudah memiliki sebuah elemen form kita hanya dapat menggunakannya untuk membangun permintaan kami.

const form = document.forms["orderproductForm"];
const formInputs = form.getElementsByTagName("input"); 
let formData = new FormData(); 
for (let input of formInputs) {
    formData.append(input.name, input.value); 
}

fetch(form.action,
    {
        method: form.method,
        body: formData
    })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.log(error.message))
    .finally(() => console.log("Done"));
Komentar (0)

Ada's juga menyerahkan acara, yang dapat memicu seperti ini $("#form_id").submit(). Anda'd gunakan metode ini jika formulir ini juga diwakili di HTML sudah. Anda'd hanya baca di halaman, mengisi form input dengan barang-barang, kemudian memanggil .submit(). It'll menggunakan metode dan tindakan yang telah ditetapkan dalam bentuk's deklarasi, sehingga anda don't perlu copy ke javascript.

contoh

Komentar (3)