การส่งแบบฟอร์ม 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 เพื่อโพสต์บนตัวจัดการการคลิกของปุ่ม come
roughvchawla

คำตอบ:


180

คำอธิบายโดยย่อของ AJAX

AJAX เป็นเพียง JSON หรือ XML แบบ Asyncronous (ในสถานการณ์ที่ใหม่กว่าส่วนใหญ่) เนื่องจากเรากำลังทำงาน ASYNC เราจึงน่าจะมอบประสบการณ์ UI ที่สนุกสนานให้กับผู้ใช้ ในกรณีนี้เรากำลังดำเนินการส่งแบบฟอร์มโดยใช้ AJAX

ได้อย่างรวดเร็วจริงๆมี 4 การกระทำเว็บทั่วไปGET, POST, PUTและDELETE; เหล่านี้ได้โดยตรงสอดคล้องกับSELECT/Retreiving DATA, INSERTING DATA, และUPDATING/UPSERTING DATA DELETING DATAHTML / 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>


เอกสารประกอบ

จาก$.postเอกสารประกอบเว็บไซต์ jQuery

ตัวอย่าง : ส่งข้อมูลแบบฟอร์มโดยใช้คำร้องขอ 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 request header ในนี้ได้อย่างไร? ฉันพยายามแล้ว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 ที่ไม่ได้เป็นส่วนหนึ่งของตัวจัดการการคลิกแบบฟอร์มใด ๆ ) ด้วยวิธีนี้ event.preventdefault จะไม่จำเป็นหรือไม่?
roughvchawla

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 OK จากเซิร์ฟเวอร์
Varun S

สวัสดีฉันใส่: $ (document) .ready (function () {$ ('# formoid'). submit (function () {var postData = "text"; $ .ajax ({type: "post", url: " url ", data: postData, contentType:" studentFormInsert.php ", ความสำเร็จ: ฟังก์ชัน (responseData, textStatus, jqXHR) {alert (" data save ")}, error: function (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>

บันทึก:

คุณสามารถใช้ $ ('FORM') แบบง่าย serialize () ตามที่แนะนำในโพสต์ด้านบน แต่จะใช้ไม่ได้กับFILE INPUTS ... ajaxForm () จะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.