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 responseType
właściwości do zdefiniowania oczekiwanego formatu odpowiedzi. Następnie można uzyskać dostęp do przeanalizowanych danych odpowiedzi za pośrednictwem response
wł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 responseJSON
właściwości, tylko responseText
i responseXML
. Tak długo, jak bitly naprawdę odpowiada jakimś responseText
kodem 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ą XMLHttpRequest
i 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ę responseJSON
wł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.