PlusMagi's Blog By Pitt Phunsanit Frontend,JavaScript,technology,Web ย้ายจาก $.post() สู่ Fetch API: การส่ง HTTP POST Request พร้อม JSON Body ด้วย Pure JavaScript

ย้ายจาก $.post() สู่ Fetch API: การส่ง HTTP POST Request พร้อม JSON Body ด้วย Pure JavaScript

ในโลกของการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ การสื่อสารระหว่างฝั่งไคลเอนต์และเซิร์ฟเวอร์ถือเป็นหัวใจสำคัญที่ทำให้ระบบต่างๆ สามารถทำงานร่วมกันได้อย่างราบรื่น ในอดีต นักพัฒนามักคุ้นเคยกับการใช้ไลบรารีอย่าง jQuery เพื่อจัดการกับคำขอแบบ Asynchronous JavaScript and XML (AJAX) ซึ่งทำได้ง่ายและสะดวก แต่เมื่อเวลาผ่านไป และด้วยการพัฒนาของมาตรฐานเว็บที่ก้าวหน้าขึ้น การใช้ Pure JavaScript API อย่าง Fetch จึงกลายเป็นทางเลือกที่เป็นมาตรฐานและมีประสิทธิภาพสูงกว่าในการจัดการ HTTP Requests ทุกรูปแบบ


เจาะลึกรายละเอียดและประเด็นสำคัญ

Fetch API คือ Web API ที่ทันสมัยกว่า XMLHttpRequest (XHR) โดยถูกออกแบบมาเพื่อจัดการกับ Network Requests ด้วย Promise ซึ่งทำให้การเขียนโค้ดแบบ Asynchronous มีความสะอาดและอ่านง่ายขึ้นอย่างมาก เมื่อเราต้องการส่งข้อมูลประเภท JSON ผ่าน HTTP POST Request สิ่งที่เราต้องทำคือการแปลง Object JavaScript ให้เป็น String JSON ก่อน จากนั้นจึงกำหนด Header ของ Request Body ว่ามี Content-Type เป็น application/json เพื่อให้เซิร์ฟเวอร์ปลายทางสามารถตีความข้อมูลได้อย่างถูกต้อง

ข้อได้เปรียบหลักของ Fetch API คือการใช้ Promise ทำให้เราสามารถใช้ `.then()` และ `.catch()` ในการจัดการผลลัพธ์ (Response) และข้อผิดพลาด (Error) ได้อย่างเป็นระบบ นอกจากนี้ยังรองรับการทำงานกับ Stream และ Response Body ที่ซับซ้อนกว่า XHR อย่างมาก ซึ่งเป็นสิ่งจำเป็นสำหรับแอปพลิเคชันระดับ Enterprise

const postData = {
    username: "developer_js",
    email: "[email protected]"
};

fetch('https://api.example.com/submit', {
    method: 'POST', // ระบุ method เป็น POST
    headers: {
        'Content-Type': 'application/json' // สำคัญมาก: บอกเซิร์ฟเวอร์ว่าเราส่ง JSON
    },
    body: JSON.stringify(postData) // แปลง Object JS ให้เป็น JSON String
})
.then(response => {
    if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json(); // อ่าน Response Body เป็น JSON อีกครั้ง
})
.then(data => {
    console.log('Success:', data);
})
.catch(error => {
    console.error('Error sending request:', error);
});
<!-- /wp-block-syntaxhighlighter/code -->


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">การนำไปประยุกต์ใช้ในชีวิตและการทำงานยุคใหม่</h2>



<ul class="wp-block-list">
<li><strong style="font-weight: 700;">การสร้าง Microservices Communication:</strong> เมื่อแอปพลิเคชันขนาดใหญ่ถูกแบ่งออกเป็นบริการย่อยๆ (Microservices) การใช้ Fetch API ในการเรียก Endpoint ของบริการต่างๆ ด้วย JSON Body จะช่วยให้โค้ดมีความเป็นมาตรฐานและสามารถจัดการกับ Failure/Timeout ได้อย่างแม่นยำกว่าเดิม</li>


<li><strong style="font-weight: 700;">การส่งข้อมูลจาก Form ที่ซับซ้อน (Rich Forms):</strong> แทนที่จะพึ่งพาการ Submit แบบดั้งเดิม การใช้ Fetch API ทำให้เราสามารถดักจับ Event ของ Form, ทำ Client-side Validation ก่อน, และส่งเฉพาะข้อมูลที่จำเป็นไปยัง Backend ได้อย่างมีประสิทธิภาพ โดยไม่ต้องโหลดหน้าใหม่</li>
</ul>



<p class="wp-block-paragraph">การเปลี่ยนผ่านจากการใช้ไลบรารีภายนอกมาสู่ Pure JavaScript API อย่าง Fetch ไม่ได้เป็นเพียงแค่การอัปเกรดโค้ด แต่เป็นการยกระดับความเข้าใจในมาตรฐานของเว็บ การทำความเข้าใจวงจรชีวิตของการส่งข้อมูลด้วย Promise และ JSON Serialization จะช่วยให้เราสร้างแอปพลิเคชันที่ทันสมัย มีประสิทธิภาพสูง และสามารถบำรุงรักษาได้ง่ายตามหลักการของ Senior Developer อย่างแท้จริง</p>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">อ่านเพิ่มเติม</p>



<ul class="wp-block-list">

<li><a href="https://pitt.plusmagi.com/linux-%e0%b8%95%e0%b8%a3%e0%b8%a7%e0%b8%88%e0%b8%aa%e0%b8%ad%e0%b8%9a%e0%b8%84%e0%b8%a7%e0%b8%b2%e0%b8%a1%e0%b8%96%e0%b8%81%e0%b8%95%e0%b8%ad%e0%b8%87%e0%b8%82%e0%b8%ad%e0%b8%87%e0%b8%a3%e0%b8%b0/" data-type="post" data-id="429">Linux: ตรวจสอบความถูกต้องของระบบด้วยสปีดขั้นสุด 🚀</a></li>


<li><a href="https://pitt.plusmagi.com/tarball-%e0%b9%80%e0%b8%9b%e0%b9%87%e0%b8%99-version-control/" data-type="post" data-id="11304">Tarball: เป็น version control ?</a></li>


<li><a href="https://pitt.plusmagi.com/473-2/" data-type="post" data-id="473">SecDevOps: เปลี่ยนความปลอดภัยให้เป็นเนื้อเดียวกับ Code และ Operation</a></li>

</ul>