AJAX - XMLHttpRequest
- หน้าก่อน AJAX XMLHttp
- หน้าต่อไป คำตอบ AJAX
XMLHttpRequest object ใช้สำหรับการแลกเปลี่ยนข้อมูลกับเซิร์ฟเวอร์
ส่งคำขอสู่เซิร์ฟเวอร์
ถ้าคุณต้องการส่งคำขอสู่เซิร์ฟเวอร์ เราใช้ XMLHttpRequest object ของ open()
และ send()
วิธี:
xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
วิธี | รายละเอียด |
---|---|
open(method, url, async) |
กำหนดประเภทคำขอ
|
send() | ส่งคำขอสู่เซิร์ฟเวอร์ (ใช้สำหรับ GET) |
send(string) | ส่งคำขอสู่เซิร์ฟเวอร์ (ใช้สำหรับ POST) |
GET หรือ POST?
GET ง่ายและรวดเร็วกว่า POST และสามารถใช้ได้ในสถานการณ์ส่วนใหญ่
อย่างไรก็ตาม ใช้ POST ในสถานการณ์ดังต่อไปนี้:
- ไฟล์คลังความจำไม่ใช่ทางเลือก (ปรับปรุงไฟล์หรือฐานข้อมูลบนเซิร์ฟเวอร์)
- ส่งข้อมูลมากมายสู่เซิร์ฟเวอร์ (POST ไม่มีขอบเขตขนาดของข้อมูล)
- ส่งข้อมูลที่มีการบันทึกโดยผู้ใช้ (สามารถมีตัวอักษรที่ไม่ทราบก่อน) โดย POST มีความแข็งแกร่งและปลอดภัยยิ่งกว่า GET
คำขอ GET
คำขอ GET ที่เรียบง่าย:
ตัวอย่าง
xhttp.open("GET", "demo_get.asp", true); xhttp.send();
ในตัวอย่างด้านบนคุณอาจได้รับผลลัพธ์ที่อยู่ในคลังความจำได้เลย ที่จะป้องกันการเกิดสถานการณ์นี้โปรดเพิ่ม ID ที่เป็นเดียวกันเท่านั้นเข้า URL:
ตัวอย่าง
xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();
ถ้าคุณต้องการส่งข้อมูลด้วยวิธี GET โปรดเพิ่มข้อมูลเหล่านี้เข้า URL:
ตัวอย่าง
xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true); xhttp.send();
คำขอ POST
คำขอ POST ที่เรียบง่าย:
ตัวอย่าง
xhttp.open("POST", "demo_post.asp", true); xhttp.send();
ถ้าคุณต้องการ POST ข้อมูลเหมือนฟอร์ม HTML โปรดใช้ setRequestHeader()
เพิ่มหัว HTTP โปรดใช้ send()
ข้อบังคับของวิธีนี้คือข้อมูลที่คุณต้องส่ง:
ตัวอย่าง
xhttp.open("POST", "ajax_test.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Bill&lname=Gates");
วิธี | รายละเอียด |
---|---|
setRequestHeader(header, value) |
เพิ่มหัวข้อ HTTP ในคำขอ
|
url - ไฟล์บนเซิร์ฟเวอร์
ของวิธี open() url ตัวเลขที่เป็นที่อยู่ของไฟล์บนเซิร์ฟเวอร์
xhttp.open("GET", "ajax_test.asp", true);
แบบไฟล์นี้สามารถเป็นได้ทุกประเภท เช่น .txt และ .xml หรือแบบไฟล์สคริปต์บนเซิร์ฟเวอร์ เช่น .asp และ .php (ที่สามารถทำงานบนเซิร์ฟเวอร์ก่อนที่จะส่งคำตอบกลับ)
อัตโนมัติ - true หรือ false?
หากต้องการส่งขอความร่วมมือทางอัตโนมัติopen()
ของวิธี async ต้องกำหนดตัวเลข true
:
xhttp.open("GET", "ajax_test.asp", true);
การส่งขอความร่วมมือทางอัตโนมัติเป็นปฏิวัติใหญ่สำหรับนักพัฒนาเว็บ หลายงานที่ทำงานบนเซิร์ฟเวอร์มีเวลาใช้เวลามาก ก่อน AJAX การดังกล่าวอาจทำให้โปรแกรมหยุดหรือหยุดทำงาน
ด้วยการส่งข้อมูลทางอัตโนมัติ JavaScript จะไม่ต้องรอคำตอบจากเซิร์ฟเวอร์ แต่สามารถ
- ปฎิบัติสุดท้ายในขณะรอคำตอบจากเซิร์ฟเวอร์
- จัดการคำตอบเมื่อเตรียมพร้อม
อาทิตย์ onreadystatechange
ผ่าน XMLHttpRequest object คุณสามารถกำหนดฟังก์ชันที่จะทำงานเมื่อการขอความร่วมมือได้รับคำตอบ
ฟังก์ชันนี้จะถูกประกาศใน XMLHttpResponse object onreadystatechange
ที่กำหนดในอาทิตย์
ตัวอย่าง
xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
คุณจะเรียนรู้มากขึ้นเกี่ยวกับ onreadystatechange ในบทบาทหลังไป
ขอความร่วมมือ
หากต้องการทำการขอความร่วมมือ โปรดใส่ open()
จัดการค่าที่สามของฟังก์ชัน false
:
xhttp.open("GET", "ajax_info.txt", false);
บางครั้ง async = false ใช้เพื่อทดสอบรวดเร็ว คุณยังจะพบคำขอที่เป็นเวลายืนยันในโค้ด JavaScript ที่เก่าแก่
เนื่องจากโค้ดจะรอเซิร์ฟเวอร์เสร็จ ดังนั้นไม่จำเป็นต้องมีฟังก์ชัน onreadystatechange
ตัวอย่าง
xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
เราไม่แนะนำการใช้ XMLHttpRequest ที่เป็นเวลายืนยัน (async = false) เพราะ JavaScript จะหยุดทำงานจนกว่าเซิร์ฟเวอร์จะตอบกลับเสร็จ ถ้าเซิร์ฟเวอร์มีปัญหาหรือช้า โปรแกรมอาจหยุดทำงานหรือหยุด
XMLHttpRequest ที่เป็นเวลายืนยันกำลังถูกถอดออกจากมาตราฐานเว็บ แต่กระบวนการนี้อาจต้องใช้เวลาหลายปี
เครื่องมือพัฒนาที่สมัยใหม่สนับสนุนให้มีคำเตือนเกี่ยวกับการใช้คำขอที่เป็นเวลายืนยัน และเมื่อเกิดสถานการณ์นี้ อาจทิ้งความผิดพลาด InvalidAccessError
- หน้าก่อน AJAX XMLHttp
- หน้าต่อไป คำตอบ AJAX