Nowe sposoby: fetch
TL; DR polecałbym ten sposób, o ile nie musisz wysyłać synchronicznych żądań ani obsługiwać starych przeglądarek.
Dopóki żądanie jest asynchroniczne, możesz używać interfejsu Fetch API do wysyłania żądań HTTP. Fetch API działa z obietnicami , co jest dobrym sposobem obsługi asynchronicznych przepływów pracy w JavaScript. W tym podejściu używasz fetch()do wysyłania żądania i ResponseBody.json()analizowania odpowiedzi:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
Zgodność: Fetch API nie jest obsługiwany przez IE11 oraz Edge 12 i 13. Istnieją jednak polyfills .
Nowe sposoby II: responseType
Jak napisał Londeren w swojej odpowiedzi , nowsze przeglądarki pozwalają na użycie tej responseTypewłaściwości do zdefiniowania oczekiwanego formatu odpowiedzi. Następnie można uzyskać dostęp do przeanalizowanych danych odpowiedzi za pośrednictwem responsewłaściwości:
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);
Zgodność: responseType = 'json'nie jest obsługiwana przez IE11.
Klasyczny sposób
Standardowy XMLHttpRequest nie ma responseJSONwłaściwości, tylko responseTexti responseXML. Tak długo, jak bitly naprawdę odpowiada jakimś responseTextkodem JSON na Twoje żądanie, powinien zawierać kod JSON jako tekst, więc wszystko, co musisz zrobić, to przeanalizować go za pomocą 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);
Zgodność: to podejście powinno działać z każdą przeglądarką obsługującą XMLHttpRequesti JSON.
JSONHttpRequest
Jeśli wolisz używać responseJSON, ale chcesz lżejszego rozwiązania niż JQuery, możesz sprawdzić mój JSONHttpRequest. Działa dokładnie tak, jak zwykły XMLHttpRequest, ale zapewnia również tę responseJSONwłaściwość. Wszystko, co musisz zmienić w swoim kodzie, to pierwsza linia:
var req = new JSONHttpRequest();
JSONHttpRequest zapewnia również funkcjonalność umożliwiającą łatwe wysyłanie obiektów JavaScript jako JSON. Więcej szczegółów i kod można znaleźć tutaj: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/ .
Pełne ujawnienie: jestem właścicielem Pixels | Bytes. Myślę, że mój skrypt jest dobrym rozwiązaniem problemu, więc zamieściłem go tutaj. Proszę zostaw komentarz, jeśli chcesz, żebym usunął link.
XMLHttpRequest; właśnie o co chodziło w tym pytaniu.