AJAX - XMLHttpRequest ออบเจก
- หน้าก่อนหน้า AJAX นิยาย
- หน้าต่อไป คำขอ AJAX
XMLHttpRequest ออปเจกเป็นหลักฐานของ AJAX
- สร้าง XMLHttpRequest
- กำหนดฟังก์ชันคลับแบ็ค
- เปิดออปเจกท์ XMLHttpRequest
- ส่งคำขอไปยังเซิร์ฟเวอร์
XMLHttpRequest
ทุกบราวเซอร์ที่สมัยนี้เข้าถึง XMLHttpRequest.
XMLHttpRequest ออปเจกท์สามารถใช้สำหรับการแลกเปลี่ยนข้อมูลกับเซิร์ฟเวอร์แบบอัลตราสตรีมมิ่ง (AJAX) นี้ หมายความว่า สามารถปรับปรุงส่วนบางส่วนของเว็บไซต์โดยไม่ต้องโหลดเว็บไซต์ทั้งหมดใหม่
สร้าง XMLHttpRequest
ทุกเบราว์เซอร์สมัยใหม่ (Chrome, Firefox, IE, Edge, Safari, Opera) มี XMLHttpRequest ภายในตัว XMLHttpRequest.
กรรมฐานสร้าง XMLHttpRequest
variable = new XMLHttpRequest();
กำหนดฟังก์ชันคลับแบ็ค
ฟังก์ชันคลับแบ็ค คือฟังก์ชันที่ถูกส่งผ่านเป็นอุปกรณ์เพื่อการเรียกใช้ฟังก์ชันอื่น
ในกรณีนี้ ฟังก์ชันคลับแบ็คควรมีรหัสที่ต้องการทำเมื่อตอบรับพร้อม
xhttp.onload = function() { // สิ่งที่คุณต้องการทำเมื่อตอบรับพร้อม }
ส่งคำขอ
เพื่อส่งคำขอสู่เซิร์ฟเวอร์ คุณสามารถใช้ XMLHttpRequest ของ XMLHttpRequest open()
และ send()
วิธี:
xhttp.open("GET", "ajax_info.txt"); xhttp.send();
ตัวอย่าง
// สร้าง XMLHttpRequest const xhttp = new XMLHttpRequest(); // กำหนดฟังก์ชันคลับแบ็ค xhttp.onload = function() { // คุณสามารถใช้ข้อมูลที่นี่ } // ส่งคำขอ xhttp.open("GET", "ajax_info.txt"); xhttp.send();
การเข้าถึงหลายโดเมน (Cross Domain Access)
ด้วยเหตุผลความปลอดภัย โปรแกรมน่าทะเบียนสมัยใหม่ไม่อนุญาตให้เข้าถึงหลายโดเมน
นี้หมายความว่าหน้าเว็บและไฟล์ XML ที่มันพยายามโหลดต้องอยู่บนเซิร์ฟเวอร์เดียวกัน
ตัวอย่างบน CodeW3C.com โหลด XML ไฟล์ที่ตั้งอยู่ในโดเมน CodeW3C.com
ถ้าคุณต้องการใช้ตัวอย่างดังกล่าวบนหน้าเว็บหนึ่งของคุณ ไฟล์ XML ที่คุณโหลดต้องอยู่บนเซิร์ฟเวอร์ของคุณเช่นกัน
วิธี XMLHttpRequest
วิธี | บรรณาธิการ |
---|---|
new XMLHttpRequest() | สร้าง XMLHttpRequest ใหม่ |
abort() | ยกเลิกคำขอปัจจุบัน |
getAllResponseHeaders() | กลับค่าของหัวข้อ |
getResponseHeader() | กลับค่าของหัวข้อที่เฉพาะ |
open(method, url, async, user, psw) |
กำหนดคำขอ
|
send() | ส่งคำขอสู่เซิร์ฟเวอร์ สำหรับคำขอ GET |
send(string) | ส่งคำขอสู่เซิร์ฟเวอร์ สำหรับคำขอ POST |
setRequestHeader() | เพิ่มตัวเลือก/ค่าเพื่อใส่ในหัวข้อที่จะส่ง |
ตัวแปรของ XMLHttpRequest
คุณสมบัติ | บรรณาธิการ |
---|---|
onload | กำหนดฟังก์ชันที่จะเรียกใช้เมื่อได้รับคำขอ (โหลด) |
onreadystatechange | กำหนดฟังก์ชันที่จะเรียกใช้เมื่อคุณสัญญาณ readyState มีการเปลี่ยนแปลง |
readyState |
บันทึกสถานะ XMLHttpRequest
|
responseText | กลับค่าข้อมูลตอบสนองในรูปแบบตัวอักษร |
responseXML | กลับค่าข้อมูลตอบสนองในรูปแบบ XML |
status |
กลับค่าสถานะของคำขอ
สำหรับรายการเต็ม โปรดเข้าถึง คู่มือคำแปลภาษา Http |
statusText | กลับค่าข้อความสถานะ (เช่น "OK" หรือ "Not Found") |
onload คุณสมบัติ
เมื่อใช้ XMLHttpRequest คุณสามารถกำหนดฟังก์ชันคอลบแบคเพื่อทำงานเมื่อได้รับคำตอบ
โปรดใช้คุณสมบัติ onload ของ XMLHttpRequest onload
กำหนดฟังก์ชันนี้ในคุณสมบัติ
ตัวอย่าง
xhttp.onload = function() { document.getElementById("demo").innerHTML = this.responseText; } xhttp.open("GET", "ajax_info.txt"); xhttp.send();
ฟังก์ชันคอลบแบคหลายฟังก์ชัน
ถ้ามีงาน AJAX หลายงานในเว็บไซต์ ควรสร้างฟังก์ชันที่ทำ XMLHttpRequest และสร้างฟังก์ชันคอลบแบคสำหรับงาน AJAX แต่ละงาน
การเรียกใช้ฟังก์ชันควรมี URL และฟังก์ชันที่จะทำงานเมื่อคำตอบพร้อม
ตัวอย่าง
loadDoc("url-1", myFunction1); loadDoc("url-2", myFunction2); function loadDoc(url, cFunction) { const xhttp = new XMLHttpRequest(); xhttp.onload = function() {cFunction(this);} xhttp.open("GET", url); xhttp.send(); } function myFunction1(xhttp) { // นี่คือการกระทำ } function myFunction2(xhttp) { // นี่คือการกระทำ }
onreadystatechange คุณสมบัติ
readyState
คุณสมบัติบันทึกสถานะ XMLHttpRequest
onreadystatechange
คุณสมบัติกำหนดฟังก์ชันคอลบแบคที่จะทำงานเมื่อค่า readyState มีการเปลี่ยนแปลง
status
คุณสมบัติและ statusText
คุณสมบัติบันทึกสถานะของ XMLHttpRequest
คุณสมบัติ | บรรณาธิการ |
---|---|
onreadystatechange | กำหนดฟังก์ชันที่จะเรียกใช้เมื่อมีการเปลี่ยนแปลงในค่า readyState |
readyState |
บันทึกสถานะ XMLHttpRequest
|
status |
กลับค่าสถานะของคำขอ
สำหรับรายการเต็ม โปรดเข้าถึง คู่มือคำแปลภาษา Http |
statusText | statusText |
ส่งกลับข้อความสถานะ (เช่น "OK" หรือ "Not Found")
เมื่อ readyState มีการเปลี่ยนแปลงเป็นครั้งที่เจ็ดแล้ว ฟังก์ชัน onreadystatechange จะถูกเรียก 4
และ status คือ 200
เมื่อเหตุการณ์เรียกแบบทดสอบเสร็จแล้ว:
ตัวอย่าง
function loadDoc() { const xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhttp.open("GET", "ajax_info.txt"); xhttp.send(); }
เหตุการณ์ onreadystatechange ถูกกระตุ้นสี่ครั้ง (1-4) และแต่ละครั้งมีการเปลี่ยนแปลง readyState ซึ่งคือการเปลี่ยนแปลงเพียงครั้งเดียว
- หน้าก่อนหน้า AJAX นิยาย
- หน้าต่อไป คำขอ AJAX