วิธีใหม่ที่ฉัน: fetch
TL; DRขอแนะนำวิธีนี้ตราบใดที่คุณไม่ต้องส่งคำขอซิงโครนัสหรือรองรับเบราว์เซอร์เก่า
ตราบใดที่คำขอของคุณเป็นแบบอะซิงโครนัสคุณสามารถใช้Fetch APIเพื่อส่งคำขอ HTTP API การดึงข้อมูลทำงานร่วมกับสัญญาซึ่งเป็นวิธีที่ดีในการจัดการเวิร์กโฟลว์แบบอะซิงโครนัสใน JavaScript ด้วยวิธีนี้คุณใช้fetch()
เพื่อส่งคำขอและResponseBody.json()
แยกวิเคราะห์การตอบกลับ:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
});
เข้ากันได้: ดึงข้อมูล API ไม่ได้รับการสนับสนุนโดย IE11 เช่นเดียวกับขอบ 12 และ 13 แต่มีpolyfills
วิธีใหม่ II: responseType
ดังที่Londerenได้เขียนไว้ในคำตอบของเขาเบราว์เซอร์รุ่นใหม่อนุญาตให้คุณใช้responseType
คุณสมบัติเพื่อกำหนดรูปแบบที่คาดหวังของการตอบกลับ จากนั้นข้อมูลการตอบกลับที่แยกวิเคราะห์สามารถเข้าถึงได้ผ่านresponse
คุณสมบัติ:
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = req.response;
};
req.send(null);
ความเข้ากันได้: responseType = 'json'
IE11 ไม่รองรับ
วิธีคลาสสิก
XMLHttpRequest มาตรฐานไม่มีresponseJSON
คุณสมบัติเพียงresponseText
และresponseXML
. ตราบใดที่บางส่วนตอบสนองด้วย JSON สำหรับคำขอของคุณอย่างแท้จริงresponseText
ควรมีโค้ด JSON เป็นข้อความดังนั้นสิ่งที่คุณต้องทำคือแยกวิเคราะห์ด้วยJSON.parse()
:
var req = new XMLHttpRequest();
req.overrideMimeType("application/json");
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = JSON.parse(req.responseText);
};
req.send(null);
เข้ากันได้: วิธีการนี้ควรทำงานร่วมกับเบราว์เซอร์ใด ๆ ที่สนับสนุนและXMLHttpRequest
JSON
JSONHttpRequest
หากคุณต้องการใช้responseJSON
แต่ต้องการโซลูชันที่มีน้ำหนักเบากว่า JQuery คุณอาจต้องการตรวจสอบ JSONHttpRequest ของฉัน มันทำงานเหมือนกับ XMLHttpRequest ทั่วไป แต่ยังให้responseJSON
คุณสมบัติ สิ่งที่คุณต้องเปลี่ยนในรหัสของคุณคือบรรทัดแรก:
var req = new JSONHttpRequest();
JSONHttpRequest ยังมีฟังก์ชันในการส่งวัตถุ JavaScript เป็น JSON ได้อย่างง่ายดาย รายละเอียดเพิ่มเติมและรหัสที่สามารถพบได้ที่นี่: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/
การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นเจ้าของ Pixels | Bytes ฉันคิดว่าสคริปต์ของฉันเป็นทางออกที่ดีสำหรับคำถามเดิม แต่มันค่อนข้างล้าสมัยในปัจจุบัน ไม่แนะนำให้ใช้อีกต่อไป
XMLHttpRequest
; คำถามเกี่ยวกับอะไร