Nuovi modi io: fetch
TL; DR Suggerirei in questo modo purché non sia necessario inviare richieste sincrone o supportare vecchi browser.
Finché la tua richiesta è asincrona, puoi utilizzare l' API Fetch per inviare richieste HTTP. L'API fetch funziona con le promesse , che è un bel modo per gestire flussi di lavoro asincroni in JavaScript. Con questo approccio si utilizza fetch()
per inviare una richiesta e ResponseBody.json()
per analizzare la risposta:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
Compatibilità: l'API Fetch non è supportata da IE11 e da Edge 12 e 13. Tuttavia, sono presenti polyfill .
Nuovi modi II: responseType
Come ha scritto Londeren nella sua risposta , i browser più recenti consentono di utilizzare la responseType
proprietà per definire il formato previsto della risposta. È quindi possibile accedere ai dati di risposta analizzati tramite la response
proprietà:
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);
Compatibilità: responseType = 'json'
non è supportato da IE11.
Il modo classico
Lo standard XMLHttpRequest non ha responseJSON
proprietà, solo responseText
e responseXML
. Finché bitly risponde davvero con un po 'di JSON alla tua richiesta, responseText
dovrebbe contenere il codice JSON come testo, quindi tutto ciò che devi fare è analizzarlo con 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);
Compatibilità: questo approccio dovrebbe funzionare con qualsiasi browser che supporti XMLHttpRequest
e JSON
.
JSONHttpRequest
Se preferisci usare responseJSON
, ma desideri una soluzione più leggera di JQuery, potresti voler controllare il mio JSONHttpRequest. Funziona esattamente come un normale XMLHttpRequest, ma fornisce anche la responseJSON
proprietà. Tutto quello che devi cambiare nel tuo codice sarebbe la prima riga:
var req = new JSONHttpRequest();
JSONHttpRequest fornisce anche funzionalità per inviare facilmente oggetti JavaScript come JSON. Maggiori dettagli e il codice possono essere trovati qui: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/ .
Divulgazione completa: sono il proprietario di Pixel | Bytes. Penso che il mio script sia una buona soluzione al problema, quindi l'ho pubblicato qui. Per favore lascia un commento, se vuoi che rimuova il link.
XMLHttpRequest
; proprio di cosa si trattava.