Jquery AJAXを使用したHTMLフォームの送信


107

この例を使用して、AJAXを使用してHTMLフォームを送信しようとしています。

私の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:私はいくつかのフィールドを持っていますが、例として2つだけ入力しました。


「フォーム」HTMLコンポーネントを廃止できませんか?そして、jqueryを使用して、
カムボタン

回答:


177

AJAXの簡単な説明

AJAXは単に非同期のJSONまたはXMLです(ほとんどの新しい状況ではJSON)。私たちはASYNCタスクを実行しているので、ユーザーにもっと楽しいUIエクスペリエンスを提供するでしょう。この特定のケースでは、AJAXを使用してFORM送信を行っています。

本当にすぐそこに4つの一般的なウェブアクションはGETPOSTPUT、とDELETE。これらは直接に対応するSELECT/Retreiving DATAINSERTING DATAUPDATING/UPSERTING DATA、およびDELETING DATA。デフォルトのHTML / ASP.Net webform / 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 Webサイトの$.postドキュメントから。

:ajaxリクエストを使用してフォームデータを送信する

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

:ajaxを使用してフォームを投稿し、結果をdivに配置する

<!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 Authorizationリクエストヘッダーを設定するにはどうすればよいですか。私は試しましたがbeforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "*****"); xhr.setRequestHeader("contentType", "application/json;charset=UTF-8"); },、これはヘッダーを設定しません
mahendra kawde

@mahendrakawdeあなたは利用する必要があるだろう$.ajax、私はあなたが好きな場合の例を書き込むことができるが、それは本当に別の質問です
abc123を

@ abc123そのために開始されたスレッドがあります。共有させてください。
mahendra kawde

1
フォームポストをまったく使用せずに、ボタン(フォームdivの一部ではないhtmlボタン)のクリックハンドラーでjqueryポストを実行できますか?このようにevent.preventdefaultも必要ありませんか?
harshvchawla

1
もちろん@harshvchawlaですが、html要素から
取得

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 OKを受信すると、成功/完了関数が発生します
Varun S

こんにちは私は置きます:$(document).ready(function(){$( '#formoid')。submit(function(){var postData = "text"; $ .ajax({type: "post"、url: " url "、data:postData、contentType:" studentFormInsert.php "、success:function(responseData、textStatus、jqXHR){alert(" data saved ")}、error:function(jqXHR、textStatus、errorThrown){console.log( errorThrown);}})});実際には機能しません.. php側で変更が必要ですか?
Oliveira

4
良い例でよく書かれているので、説明のない例のコードだけでなく、いくつかの回答を投稿してください。
abc123 2013年

2
それを投稿したいフォームに接続する方法がわかりません
Piotr Kamoda 2017年

なぜ説明がないのですか?
リッチ

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>

注意:

上記のポストで提案されているように単純な$( 'FORM')。serialize()を使用できますが、それはファイル入力では機能しません... ajaxForm()は機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.