jQuery Academy · บทเรียน

การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX

เชี่ยวชาญการส่งข้อมูลแบบฟอร์มแบบอะซิงโครนัสผ่าน AJAX ให้ข้อมูลตอบกลับแก่ผู้ใช้แบบเรียลไทม์ และจัดการการตอบกลับจากเซิร์ฟเวอร์โดยไม่ต้องโหลดทั้งหน้าใหม่ เพื่อประสบการณ์ผู้ใช้ที่ราบรื่นยิ่งขึ้น

บทเรียน 3 จาก 311 ขั้นตอน

การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX เป็นบทเรียน jQuery Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน jQuery Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส jQuery Academy มีบทเรียนทั้งหมด 3 บทเรียน

แบบฟอร์มลื่นไหลด้วย AJAX

ลองนึกภาพการส่งแบบฟอร์มโดยไม่ต้องโหลดทั้งหน้าเว็บใหม่! นี่คือความมหัศจรรย์ของการส่งแบบฟอร์มด้วย AJAX

แทนที่จะรีเฟรชทั้งหน้า AJAX จะช่วยให้คุณส่งข้อมูลแบบฟอร์มไปยังเซิร์ฟเวอร์เบื้องหลังได้ จึงมอบประสบการณ์ผู้ใช้ที่ลื่นไหลและรวดเร็วยิ่งขึ้น เหมาะสำหรับความคิดเห็น การสมัครใช้งาน หรือการอัปเดตอย่างรวดเร็ว

หยุดการส่งตามค่าเริ่มต้น

ขั้นตอนแรกของการส่งแบบฟอร์มด้วย AJAX คือการป้องกันพฤติกรรมเริ่มต้นของเบราว์เซอร์ หากไม่ทำเช่นนั้น หน้าเว็บจะโหลดใหม่ตามปกติ ซึ่งทำให้จุดประสงค์ของ AJAX สูญเปล่า!

เราทำได้โดยเรียกใช้ event.preventDefault() ภายในตัวจัดการการส่งแบบฟอร์ม

<form id="myForm">
  <label for="username">Name:</label>
  <input type="text" id="username" name="username" placeholder="Your name">
  <button type="submit">Submit</button>
</form>
<div id="status"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#myForm').submit(function(event) {
      event.preventDefault(); // Stop default form submission
      $('#status').text("Form submission prevented!");
      console.log("Form submission prevented!");
    });
  });
</script>

การเตรียมข้อมูลแบบฟอร์ม

ก่อนส่งข้อมูลแบบฟอร์มผ่าน AJAX เราต้องจัดแพ็กข้อมูลให้ถูกต้อง เมธอด .serialize() ของ jQuery เหมาะอย่างยิ่งสำหรับงานนี้!

  • เมธอดนี้จะรวบรวมค่าจากองค์ประกอบ input, select และ textarea ทั้งหมดภายในแบบฟอร์มโดยอัตโนมัติ
  • จากนั้นเข้ารหัสเป็นสตริงที่เข้ารหัสตามรูปแบบ URL (เช่น name=Alice&email=alice%40example.com)
  • สตริงนี้เป็นรูปแบบมาตรฐานสำหรับส่งข้อมูลแบบฟอร์มไปยังเซิร์ฟเวอร์
<form id="dataForm">
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" value="Bob">
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" value="bob@example.com">
  <button type="submit">Get Data</button>
</form>
<div id="output"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#dataForm').submit(function(event) {
      event.preventDefault();
      let formData = $(this).serialize();
      $('#output').text("Serialized: " + formData);
      console.log(formData); // name=Bob&email=bob%40example.com
    });
  });
</script>

การส่งคำขอ AJAX

เมื่อจัดข้อมูลแบบฟอร์มให้อยู่ในรูปสตริงแล้ว เราก็สามารถส่งข้อมูลไปยังเซิร์ฟเวอร์ได้ jQuery มีเมธอด AJAX หลายรายการ แต่ $.post() เป็นทางลัดที่สะดวกสำหรับการส่งข้อมูลโดยใช้เมธอด HTTP POST

เมธอดนี้รับ URL ของเซิร์ฟเวอร์ ข้อมูลที่จัดเป็นสตริงแล้ว และฟังก์ชันเรียกกลับที่เป็นตัวเลือก ซึ่งจะทำงานเมื่อดำเนินการสำเร็จ

<form id="submitForm">
  <label for="msg">Message:</label>
  <input type="text" id="msg" name="message" value="Hello AJAX!">
  <button type="submit">Send</button>
</form>
<div id="response"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#submitForm').submit(function(event) {
      event.preventDefault();
      let formData = $(this).serialize();
      // Using a dummy API endpoint for demonstration
      $.post("https://jsonplaceholder.typicode.com/posts", formData, function(data) {
        $('#response').text("Success! Server ID: " + data.id);
        console.log("Server response:", data);
      });
    });
  });
</script>

การแสดงคำแนะนำระหว่างโหลด

เมื่อผู้ใช้คลิกส่ง ผู้ใช้ย่อมคาดหวังการตอบสนองทันที เนื่องจากคำขอ AJAX ทำงานแบบอะซิงโครนัส จึงมีช่วงหน่วงเวลา การแสดงคำแนะนำด้วยภาพจึงสำคัญอย่างยิ่ง!

คุณสามารถแสดงข้อความ 'กำลังโหลด...' หรือสัญลักษณ์หมุนขณะคำขอกำลังดำเนินการ และซ่อนเมื่อได้รับการตอบกลับ

<style>
  #loading { display: none; color: gray; }
</style>
<form id="feedbackForm">
  <label for="item">Item:</label>
  <input type="text" id="item" name="item" value="New Widget">
  <button type="submit">Add</button>
</form>
<div id="loading">Loading...</div>
<div id="status"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#feedbackForm').submit(function(event) {
      event.preventDefault();
      $('#loading').show(); // Show loading indicator
      $('#status').text(''); // Clear previous status
      let formData = $(this).serialize();
      $.post("https://jsonplaceholder.typicode.com/posts", formData, function(data) {
        $('#loading').hide(); // Hide loading
        $('#status').text("Item added with ID: " + data.id);
      });
    });
  });
</script>

การจัดการการตอบกลับเมื่อสำเร็จ

เมื่อเซิร์ฟเวอร์ประมวลผลข้อมูลแบบฟอร์มสำเร็จ โดยทั่วไปเซิร์ฟเวอร์จะส่งการตอบกลับกลับมา ซึ่งอาจเป็นข้อความยืนยัน ID ของระเบียนที่สร้างขึ้นใหม่ หรือข้อมูลที่อัปเดตแล้ว

ฟังก์ชันเรียกกลับเมื่อสำเร็จ (อาร์กิวเมนต์ที่สามใน $.post()) จะได้รับข้อมูลนี้ ทำให้คุณอัปเดตส่วนติดต่อผู้ใช้ได้ตามต้องการ

<form id="addTodoForm">
  <label for="todoTitle">Todo:</label>
  <input type="text" id="todoTitle" name="title" placeholder="New todo item">
  <button type="submit">Add Todo</button>
</form>
<ul id="todoList"></ul>
<div id="message"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#addTodoForm').submit(function(event) {
      event.preventDefault();
      $('#message').text('Adding...');
      let formData = $(this).serialize();
      $.post("https://jsonplaceholder.typicode.com/todos", formData, function(todo) {
        $('#message').text('Todo added!');
        $('#todoList').append('<li>' + todo.title + ' (ID: ' + todo.id + ')</li>');
        $('#addTodoForm')[0].reset(); // Clear form fields
      });
    });
  });
</script>

การจัดการข้อผิดพลาดอย่างเหมาะสม

ไม่ใช่ทุกคำขอจะสำเร็จ ปัญหาเครือข่าย ข้อผิดพลาดของเซิร์ฟเวอร์ หรือข้อมูลที่ไม่ถูกต้องอาจทำให้คำขอ AJAX ล้มเหลวได้ การจัดการข้อผิดพลาดเหล่านี้อย่างเหมาะสมและแจ้งให้ผู้ใช้ทราบจึงเป็นสิ่งสำคัญ

สำหรับ $.post() คุณสามารถต่อเมธอด .fail() ได้ ส่วน $.ajax() คุณสามารถใช้การเรียกกลับ error หรือเมธอด .fail() กับวัตถุ Deferred ที่ส่งคืนมา

<form id="errorForm">
  <label for="badData">Data:</label>
  <input type="text" id="badData" name="data" value="bad value">
  <button type="submit">Submit</button>
</form>
<div id="errorMessage" style="color: red;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#errorForm').submit(function(event) {
      event.preventDefault();
      $('#errorMessage').text('');
      let formData = $(this).serialize();
      // Simulating an error by posting to a non-existent endpoint
      $.ajax({
        url: "https://jsonplaceholder.typicode.com/nonexistent-endpoint", // Will cause a 404 error
        type: "POST",
        data: formData
      })
      .done(function(data) {
        $('#errorMessage').text("Unexpected success!");
      })
      .fail(function(jqXHR, textStatus, errorThrown) {
        $('#errorMessage').text("Error: " + textStatus + " - " + errorThrown);
        console.error("AJAX Error:", textStatus, errorThrown);
      });
    });
  });
</script>

การล้างแบบฟอร์มหลังการส่ง

หลังจากส่งแบบฟอร์มสำเร็จ การล้างช่องรับข้อมูลถือเป็นประสบการณ์ผู้ใช้ที่ดี วิธีนี้ช่วยป้องกันการส่งซ้ำโดยไม่ตั้งใจ และเตรียมแบบฟอร์มให้พร้อมสำหรับการดำเนินการครั้งถัดไป

คุณสามารถใช้เมธอด .reset() ของ DOM ดั้งเดิมกับองค์ประกอบแบบฟอร์ม หรือล้างค่าในช่องรับข้อมูลแต่ละช่องด้วยตนเอง

<form id="clearForm">
  <label for="item">Item:</label>
  <input type="text" id="item" name="item" value="Item A">
  <label for="quantity">Quantity:</label>
  <input type="number" id="quantity" name="quantity" value="1">
  <button type="submit">Add</button>
</form>
<div id="feedbackMsg" style="color: green;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#clearForm').submit(function(event) {
      event.preventDefault();
      $('#feedbackMsg').text('Submitting...');
      let formData = $(this).serialize();
      $.post("https://jsonplaceholder.typicode.com/posts", formData, function(data) {
        $('#feedbackMsg').text('Successfully added! ID: ' + data.id);
        $('#clearForm')[0].reset(); // Clears all form fields
      });
    });
  });
</script>

ตัวอย่างแบบฟอร์ม AJAX แบบครบถ้วน

เรามารวมเทคนิคทั้งหมดที่ได้เรียนรู้กัน ได้แก่ การป้องกันการส่งตามค่าเริ่มต้น การจัดข้อมูลเป็นสตริง การส่งคำขอ AJAX การแสดงคำแนะนำระหว่างโหลด การจัดการการตอบกลับทั้งเมื่อสำเร็จและล้มเหลว และสุดท้ายคือการล้างแบบฟอร์ม

แนวทางที่ครอบคลุมนี้ช่วยให้ประสบการณ์การใช้แบบฟอร์ม AJAX มีความรัดกุมและใช้งานง่าย

<style>
  #loader { display: none; color: blue; }
  #result { margin-top: 10px; font-weight: bold; }
</style>
<form id="fullAjaxForm">
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" required>
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" required>
  <button type="submit">Register</button>
</form>
<div id="loader">Processing...</div>
<div id="result"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#fullAjaxForm').submit(function(event) {
      event.preventDefault(); // Stop default form submission
      $('#loader').show();    // Show loading indicator
      $('#result').text('');  // Clear previous results
      let formData = $(this).serialize(); // Serialize form data
      
      $.ajax({
        url: "https://jsonplaceholder.typicode.com/users", // Dummy API endpoint
        type: "POST",
        data: formData,
        dataType: "json" // Expect JSON response
      })
      .done(function(response) {
        $('#result').css('color', 'green').text('Registration successful! ID: ' + response.id);
        $('#fullAjaxForm')[0].reset(); // Clear form fields
      })
      .fail(function(jqXHR, textStatus, errorThrown) {
        $('#result').css('color', 'red').text('Registration failed: ' + textStatus);
        console.error("AJAX Error:", textStatus, errorThrown);
      })
      .always(function() {
        $('#loader').hide(); // Always hide loading indicator
      });
    });
  });
</script>

ตรวจสอบความเข้าใจของคุณ

คุณได้เรียนรู้วิธีส่งแบบฟอร์มด้วย AJAX พร้อมให้คำแนะนำแบบเรียลไทม์แล้ว มาทดสอบความรู้ของคุณกัน!

ทบทวน: การส่งแบบฟอร์มอย่างลื่นไหล

ยินดีด้วย! คุณเชี่ยวชาญการส่งแบบฟอร์มด้วย AJAX แล้ว ช่วยยกระดับแอปพลิเคชันเว็บด้วยประสบการณ์ผู้ใช้ที่ลื่นไหลและไม่รบกวนการใช้งาน

  • คุณได้เรียนรู้การป้องกันพฤติกรรมเริ่มต้นของแบบฟอร์มด้วย event.preventDefault()
  • คุณใช้ .serialize() เพื่อเตรียมข้อมูลแบบฟอร์มสำหรับส่งได้อย่างง่ายดาย
  • คุณใช้ $.post() หรือ $.ajax() เพื่อส่งข้อมูลแบบอะซิงโครนัส
  • คุณเพิ่มคำแนะนำแบบเรียลไทม์ที่สำคัญสำหรับสถานะกำลังโหลด สำเร็จ และข้อผิดพลาด
  • สุดท้าย คุณได้เรียนรู้การล้างแบบฟอร์มหลังการส่ง เพื่อให้ส่วนติดต่อผู้ใช้สะอาดและพร้อมใช้งาน

ทักษะเหล่านี้จำเป็นต่อการสร้างแบบฟอร์มเว็บสมัยใหม่ที่ตอบสนองได้ดี!

เริ่มต้นได้ฟรี

เรียนรู้ JavaScript ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
22
บทเรียน
48

คำถามที่พบบ่อย

บทเรียน “การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส jQuery Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส jQuery Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX”

เชี่ยวชาญการส่งข้อมูลแบบฟอร์มแบบอะซิงโครนัสผ่าน AJAX ให้ข้อมูลตอบกลับแก่ผู้ใช้แบบเรียลไทม์ และจัดการการตอบกลับจากเซิร์ฟเวอร์โดยไม่ต้องโหลดทั้งหน้าใหม่ เพื่อประสบการณ์ผู้ใช้ที่ราบรื่นยิ่งขึ้น คุณปฏิบัติ jQuery Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน jQuery Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน jQuery Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน jQuery Academy นี้ได้ไหม

ได้ บทเรียน jQuery Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การจัดการช่องกรอกแบบฟอร์มแบบไดนามิก
  2. ตรรกะการตรวจสอบแบบฟอร์มฝั่งไคลเอ็นต์
  3. การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX
← กลับไปที่ jQuery Academy