⊗jsSpAXFt 244 of 294 menu

พื้นฐานการทำงานกับ fetch ใน AJAX

ตอนนี้มาดูวิธีโหลดบางส่วนของหน้าด้วย AJAX กัน สมมติว่าบนหน้า index.html ของเรามี div และปุ่ม (นี่คือเนื้อหาของ body):

<div></div> <button>click me</button>

สมมติว่าเรามีหน้า ajax.html ด้วย ซึ่งมีสามย่อหน้า (ไม่มีแท็กหน้า เพียงแค่าย่อหน้า):

<p>1</p> <p>2</p> <p>3</p>

มาทำให้เมื่อคลิกที่ปุ่ม บนหน้า index.html เนื้อหาของหน้า ajax.html จะถูกโหลดลงใน div

ในการทำเช่นนี้ ก่อนอื่นต้องรับลิงก์ไปยังองค์ประกอบของเรา ลงในตัวแปร:

let div = document.querySelector('div'); let button = document.querySelector('button');

มาติดตั้งตัวจัดการการคลิกบนปุ่ม:

button.addEventListener('click', function() { // เราจะดำเนินการร้องขอ AJAX ที่นี่ });

ตอนนี้เรามาดำเนินการร้องขอ AJAX กัน สำหรับสิ่งนี้ใช้ฟังก์ชัน fetch รับพารามิเตอร์เป็นที่อยู่ของหน้าที่เราต้องการรับเนื้อหา ลองระบุที่อยู่ของหน้า ajax.html บนเซิร์ฟเวอร์ของเรา:

button.addEventListener('click', function() { let result = fetch('/ajax.html'); });

fetch จะคืนค่า promise เป็นผลลัพธ์ของมัน ความจริงก็คือการร้องขอหน้าผ่าน AJAX - นี่คือการดำเนินการแบบอะซิงโครนัส เพราะมันจะใช้ เวลาบ้างหลังจากนั้นหน้าจะตอบสนองต่อเรา

มารับผลลัพธ์ของ promise:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // คำตอบของเซิร์ฟเวอร์อยู่ในตัวแปร response }); });

ทำให้ง่ายขึ้นโดยกำจัดตัวแปรที่ไม่จำเป็น:

button.addEventListener('click', function() { fetch('/ajax.html').then(function(response) { }); });

ทำให้ง่ายขึ้นโดยใช้ฟังก์ชันลูกศร:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { }); });

นำเสนอในรูปแบบที่อ่านง่ายขึ้น:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { } ); });

ในตัวแปร response มีอยู่ค่อนข้าง ซับซ้อนเป็นวัตถุของคลาส Response:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { console.log(response); // วัตถุของคลาส Response }); });

เราจะศึกษาโครงสร้างลึกของวัตถุนี้ใน บทเรียนต่อไป และตอนนี้เราต้องการสิ่งที่ง่ายที่สุด - รับข้อความของหน้าที่ร้องขอ สำหรับ สิ่งนี้ในวัตถุนี้มีเมธอด text อย่างไรก็ตาม เมธอดนี้ไม่ได้คืนค่าข้อความของหน้า แต่คืนค่า promise พร้อมกับข้อความของมัน:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { console.log(response.text()); // แสดง Promise } ); });

เพื่อให้ได้ข้อความของหน้า จำเป็นต้อง ประมวลผล promise ที่ได้รับจาก response.text อีกครั้ง:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { return response.text(); } ).then( text => { console.log(text); // ข้อความของหน้า } ); });

ดังนั้น ในที่สุดเราก็ได้รับข้อความของหน้าที่ร้องขอ และสามารถ ตัวอย่างเช่น เขียนมันลงใน div ของเรา:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { return response.text(); } ).then( text => { div.innerHTML = text; } ); });

มีสามปุ่มและ div บนเซิร์ฟเวอร์มีสาม หน้า ทำให้แต่ละปุ่ม โหลดหน้าที่เกี่ยวข้องลงใน div

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

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ