Những cách mới tôi: fetch
TL; DR Tôi khuyên bạn nên làm theo cách này miễn là bạn không phải gửi yêu cầu đồng bộ hoặc hỗ trợ các trình duyệt cũ.
Miễn là yêu cầu của bạn không đồng bộ, bạn có thể sử dụng API Tìm nạp để gửi các yêu cầu HTTP. API tìm nạp hoạt động với các hứa hẹn , đây là một cách hay để xử lý các luồng công việc không đồng bộ trong JavaScript. Với cách tiếp cận này, bạn sử dụng fetch()
để gửi yêu cầu và ResponseBody.json()
phân tích cú pháp phản hồi:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
Khả năng tương thích: API Tìm nạp không được hỗ trợ bởi IE11 cũng như Edge 12 & 13. Tuy nhiên, vẫn có các polyfills .
Những cách mới II: responseType
Như Londeren đã viết trong câu trả lời của mình , các trình duyệt mới hơn cho phép bạn sử dụng thuộc responseType
tính để xác định định dạng mong đợi của phản hồi. Dữ liệu phản hồi đã phân tích cú pháp sau đó có thể được truy cập thông qua thuộc response
tính:
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = req.response;
// do something with jsonResponse
};
req.send(null);
Khả năng tương thích: responseType = 'json'
không được hỗ trợ bởi IE11.
Cách cổ điển
XMLHttpRequest chuẩn không có thuộc responseJSON
tính, chỉ responseText
và responseXML
. Miễn là thực sự phản hồi một cách bitly với một số JSON cho yêu cầu của bạn, responseText
phải chứa mã JSON dưới dạng văn bản, vì vậy tất cả những gì bạn phải làm là phân tích cú pháp nó bằng JSON.parse()
:
var req = new XMLHttpRequest();
req.overrideMimeType("application/json");
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = JSON.parse(req.responseText);
// do something with jsonResponse
};
req.send(null);
Khả năng tương thích: Cách tiếp cận này sẽ hoạt động với bất kỳ trình duyệt nào hỗ trợ XMLHttpRequest
và JSON
.
JSONHttpRequest
Nếu bạn thích sử dụng responseJSON
, nhưng muốn một giải pháp nhẹ hơn JQuery, bạn có thể muốn xem JSONHttpRequest của tôi. Nó hoạt động chính xác như một XMLHttpRequest bình thường, nhưng cũng cung cấp thuộc responseJSON
tính. Tất cả những gì bạn phải thay đổi trong mã của mình sẽ là dòng đầu tiên:
var req = new JSONHttpRequest();
JSONHttpRequest cũng cung cấp chức năng để dễ dàng gửi các đối tượng JavaScript dưới dạng JSON. Bạn có thể tìm thấy thêm chi tiết và mã tại đây: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/ .
Tiết lộ đầy đủ: Tôi là chủ sở hữu của Pixels | Bytes. Tôi nghĩ rằng kịch bản của tôi là một giải pháp tốt cho vấn đề, vì vậy tôi đã đăng nó ở đây. Hãy để lại bình luận, nếu bạn muốn tôi gỡ bỏ liên kết.
XMLHttpRequest
; chỉ là câu hỏi về cái gì.