การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX
เชี่ยวชาญการส่งข้อมูลแบบฟอร์มแบบอะซิงโครนัสผ่าน AJAX ให้ข้อมูลตอบกลับแก่ผู้ใช้แบบเรียลไทม์ และจัดการการตอบกลับจากเซิร์ฟเวอร์โดยไม่ต้องโหลดทั้งหน้าใหม่ เพื่อประสบการณ์ผู้ใช้ที่ราบรื่นยิ่งขึ้น
การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจัดการช่องกรอกแบบฟอร์มแบบไดนามิก
- ตรรกะการตรวจสอบแบบฟอร์มฝั่งไคลเอ็นต์
- การส่งแบบฟอร์มและข้อมูลตอบกลับด้วย AJAX