Подання HTML форми за допомогою Jquery AJAX


107

На цьому прикладі я намагаюся надіслати HTML-форму за допомогою AJAX .

Мій HTML-код:

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

Мій сценарій:

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

Це не працює, я навіть не отримую повідомлення попередження, і коли я надсилаю, я не хочу переадресовувати на іншу сторінку, я просто хочу показати попередження.

Чи існує простий спосіб зробити це?

PS: У мене є кілька полів, я лише приклав два як приклад.


Ви не можете покінчити з HTML формою компонента? і використовуйте jquery, щоб розмістити обробник
клацань

Відповіді:


177

Короткий опис AJAX

AJAX - це просто асинхронний JSON або XML (у більшості нових ситуацій JSON). Оскільки ми виконуємо завдання ASYNC, ми, швидше за все, надамо своїм користувачам приємніший інтерфейс користувача. У цьому конкретному випадку ми робимо форму подання за допомогою AJAX.

Дійсно швидко є 4 загальні веб - дії GET, POST, PUT, і DELETE; вони безпосередньо відповідаютьSELECT/Retreiving DATA , INSERTING DATA, UPDATING/UPSERTING DATAі DELETING DATA. За замовчуванням веб-форма HTML / ASP.Net / PHP / Python або будь-яка інша formдія - це "подати", що є дією POST. Через це внизу все буде описано виконання POST. Однак іноді за допомогою http ви можете захотіти іншої дії і, ймовірно, захочете скористатися .ajax.

Мій код спеціально для вас (описаний у коментарях до коду):

/* 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>


Документація

З веб-сайту jQuery $.post документації на .

Приклад : Надіслати дані форми, використовуючи запити ajax

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

Приклад : Опублікуйте форму за допомогою ajax і введіть результати в діл

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

Важлива примітка

Не використовуючи OAuth або мінімум HTTPS (TLS / SSL), будь ласка, не використовуйте цей метод для захищених даних (номери кредитних карт, SSN, будь-що, що стосується PCI, HIPAA або входу)


@ abc123 Як я можу встановити заголовок запиту авторизації у цьому? Я спробував beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "*****"); xhr.setRequestHeader("contentType", "application/json;charset=UTF-8"); },Але це не встановлює жодного заголовка
mahendra kawde

@mahendrakawde вам потрібно буде скористатись $.ajaxяким я можу написати приклад, якщо ви хочете, але це справді окреме питання
abc123

@ abc123 У мене є започаткована тема для цього. дозвольте мені поділитися з вами.
mahendra kawde

1
чи можемо ми взагалі не використовувати публікацію форми та просто робити публікацію jquery на кнопці (яка є кнопкою html, яка не є частиною будь-якої форми діви)? Таким чином, подія не потрібна?
harshvchawla

1
@harshvchawla звичайно, але тоді ваш вибір вибору для змінних, витягнутих з елемента html, є іншим
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
функція успіху / завершення відбудеться, коли дзвінок завершено, і він отримає 200 ОК від сервера
Varun S

привіт я поклав: $ (документ) .ready (функція () {$ ('# formoid'). submit (функція () {var postData = "текст"; $ .ajax ({тип: "повідомлення", URL: " url ", дані: postData, contentType:" studentFormInsert.php ", успіх: функція (responseData, textStatus, jqXHR) {alert (" дані збережені ")}, помилка: функція (jqXHR, textStatus, errorThrown) {console.log ( errorThrown);}})}); її фактично не працює .. будь-які зміни на стороні php потрібні?
Oliveira

4
хороший приклад і добре написаний, будь ласка, опублікуйте з ним якусь відповідь, хоча не просто код прикладу без пояснень.
abc123

2
Мені не зрозуміти, як це пов’язати з формою, яку я хочу опублікувати
Piotr Kamoda

Чому немає пояснень?
Багатий

3

Якщо ви додасте:

jquery.form.min.js

Ви можете просто зробити це:

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

ПРИМІТКА:

Ви можете використовувати прості $ ("ФОРМА"). Serialize (), як було запропоновано у публікації вище, але це не спрацює для ВДІЙНИХ ФАЙЛІВ ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.