Jquery AJAX kullanarak HTML formu gönderme


107

Bu örneği kullanarak AJAX kullanarak bir HTML formu göndermeye çalışıyorum .

HTML kodum:

<form id="formoid" action="studentFormInsert.php" title="" method="post">
    <div>
        <label class="title">First Name</label>
        <input type="text" id="name" name="name" >
    </div>
    <div>
        <label class="title">Name</label>
        <input type="text" id="name2" name="name2" >
    </div>
    <div>
        <input type="submit" id="submitButton"  name="submitButton" value="Submit">
    </div>
</form>

Senaryom:

<script type="text/javascript">
    $(document).ready(function() { 
        $('#formoid').ajaxForm(function() { 
            alert("Thank you for your comment!"); 
        }); 
    });
</script>

Bu çalışmıyor, uyarı mesajını bile alamıyorum ve gönderdiğimde başka bir sayfaya yönlendirmek istemiyorum, sadece uyarı mesajını göstermek istiyorum.

Bunu yapmanın basit bir yolu var mı?

Not: Birkaç alanım var, örnek olarak sadece iki tane koydum.


"form" html bileşenini ortadan kaldıramaz mısınız? ve gel düğmesinin tıklama işleyicisine göndermek için jquery kullanın
harshvchawla

Yanıtlar:


178

AJAX'ın Hızlı Tanımı

AJAX, Asyncronous JSON veya XML'dir (çoğu yeni durumda JSON). Bir ASYNC görevi yaptığımız için, kullanıcılarımıza daha keyifli bir UI deneyimi sunacağız. Bu özel durumda AJAX kullanarak bir FORM gönderimi yapıyoruz.

Gerçekten hızlı 4 genel web işlem vardır GET, POST, PUTve DELETE; Bu doğrudan karşılık SELECT/Retreiving DATA, INSERTING DATA, UPDATING/UPSERTING DATA, ve DELETING DATA. Varsayılan bir HTML / ASP.Net web formu / PHP / Python veya diğer herhangi bir formeylem, bir POST eylemi olan "göndermektir". Bu nedenle, aşağıdakilerin tümü bir POST yapmayı açıklayacaktır. Ancak bazen http ile farklı bir eylem isteyebilir ve muhtemelen yararlanmak isteyebilirsiniz .ajax.

Kodum özellikle sizin için (kod yorumlarında açıklanmıştır):

/* attach a submit handler to the form */
$("#formoid").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get the action attribute from the <form action=""> element */
  var $form = $(this),
    url = $form.attr('action');

  /* Send the data using post with element id name and name2*/
  var posting = $.post(url, {
    name: $('#name').val(),
    name2: $('#name2').val()
  });

  /* Alerts the results */
  posting.done(function(data) {
    $('#result').text('success');
  });
  posting.fail(function() {
    $('#result').text('failed');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="formoid" action="studentFormInsert.php" title="" method="post">
  <div>
    <label class="title">First Name</label>
    <input type="text" id="name" name="name">
  </div>
  <div>
    <label class="title">Last Name</label>
    <input type="text" id="name2" name="name2">
  </div>
  <div>
    <input type="submit" id="submitButton" name="submitButton" value="Submit">
  </div>
</form>

<div id="result"></div>


Dokümantasyon

JQuery web sitesi $.postbelgelerinden.

Örnek : Form verilerini ajax isteklerini kullanarak gönderin

$.post("test.php", $("#testform").serialize());

Örnek : Ajax kullanarak bir form gönderin ve sonuçları bir div'e koyun

<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <form action="/" id="searchForm">
            <input type="text" name="s" placeholder="Search..." />
            <input type="submit" value="Search" />
        </form>
        <!-- the result of the search will be rendered inside this div -->
        <div id="result"></div>
        <script>
            /* attach a submit handler to the form */
            $("#searchForm").submit(function(event) {

                /* stop form from submitting normally */
                event.preventDefault();

                /* get some values from elements on the page: */
                var $form = $(this),
                    term = $form.find('input[name="s"]').val(),
                    url = $form.attr('action');

                /* Send the data using post */
                var posting = $.post(url, {
                    s: term
                });

                /* Put the results in a div */
                posting.done(function(data) {
                    var content = $(data).find('#content');
                    $("#result").empty().append(content);
                });
            });
        </script>
    </body>
</html>

Önemli Not

OAuth kullanmadan veya minimum HTTPS (TLS / SSL) kullanmadan lütfen bu yöntemi güvenli veriler için kullanmayın (kredi kartı numaraları, SSN, PCI, HIPAA veya oturum açma ile ilgili herhangi bir şey)


@ abc123 Bunun içinde Yetkilendirme isteği başlığını nasıl ayarlayabilirim? Denedim beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "*****"); xhr.setRequestHeader("contentType", "application/json;charset=UTF-8"); },Ama bu herhangi bir başlık belirlemiyor
mahendra kawde

@mahendrakawde kullanman gerekecek, istersen $.ajaxbir örnek yazabilirim ama bu gerçekten ayrı bir soru
abc123

@ abc123 Bunun için başlatılmış iş parçacığım var. seninle paylaşmama izin ver
mahendra kawde

1
form postunu kullanmaktan tamamen kaçınabilir miyiz ve bir düğmenin (herhangi bir form div'in parçası olmayan bir html düğmesi olan) tıklama işleyicisinde jquery postası yapabilir miyiz? Bu şekilde event.preventdefault da gerekmeyecek mi?
harshvchawla

1
Elbette @harshvchawla, ancak html öğesinden alınan değişkenler için seçme sorgunuz farklı
abc123

26
var postData = "text";
      $.ajax({
            type: "post",
            url: "url",
            data: postData,
            contentType: "application/x-www-form-urlencoded",
            success: function(responseData, textStatus, jqXHR) {
                alert("data saved")
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(errorThrown);
            }
        })

1
başarı / tamamlanma işlevi, çağrı tamamlandığında ve sunucudan 200 OK aldığında gerçekleşir
Varun S

merhaba şunu koydum: $ (document) .ready (function () {$ ('# formoid'). submit (function () {var postData = "text"; $ .ajax ({type: "post", url: " url ", data: postData, contentType:" studentFormInsert.php ", başarı: işlev (responseData, textStatus, jqXHR) {alert (" veri kaydedildi ")}, hata: fonksiyon (jqXHR, textStatus, errorThrown) {console.log ( errorThrown);}})}); aslında çalışmıyor .. php tarafında herhangi bir değişiklik gerekli mi?
Oliveira

4
iyi bir örnek ve iyi yazılmış, lütfen açıklama içermeyen sadece örnek kod değil, bununla birlikte bir cevap gönderin.
abc123

2
Bunu göndermek istediğim formla nasıl
ilişkilendireceğimi anlamıyorum

Neden bir açıklama yok?
Zengin

3

Eklerseniz:

jquery.form.min.js

Bunu basitçe yapabilirsiniz:

<script>
$('#myform').ajaxForm(function(response) {
  alert(response);
});

// this will register the AJAX for <form id="myform" action="some_url">
// and when you submit the form using <button type="submit"> or $('myform').submit(), then it will send your request and alert response
</script>

NOT:

Yukarıdaki yazıda önerildiği gibi basit $ ['FORM']. Serialize () 'yi kullanabilirsiniz, ancak bu DOSYA GİRİŞLERİ için işe yaramaz ... ajaxForm () işe yarayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.