Novas maneiras I: fetch
TL; DR Eu recomendo essa forma, desde que você não precise enviar solicitações síncronas ou oferecer suporte a navegadores antigos.
Contanto que sua solicitação seja assíncrona, você pode usar a API Fetch para enviar solicitações HTTP. A API fetch funciona com promessas , que é uma boa maneira de lidar com fluxos de trabalho assíncronos em JavaScript. Com essa abordagem, você usa fetch()para enviar uma solicitação e ResponseBody.json()analisar a resposta:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
Compatibilidade: A API Fetch não é compatível com o IE11 e também com o Edge 12 e 13. No entanto, existem polyfills .
Novas maneiras II: responseType
Como Londeren escreveu em sua resposta , os navegadores mais recentes permitem que você use a responseTypepropriedade para definir o formato esperado da resposta. Os dados de resposta analisados podem ser acessados por meio da responsepropriedade:
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);
Compatibilidade: responseType = 'json'não é compatível com o IE11.
O jeito clássico
O XMLHttpRequest padrão não possui responseJSONpropriedade, apenas responseTexte responseXML. Contanto que o bitly realmente responda com algum JSON à sua solicitação, responseTextdeve conter o código JSON como texto, então tudo que você precisa fazer é analisá-lo com 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);
Compatibilidade: esta abordagem deve funcionar com qualquer navegador que suporte XMLHttpRequeste JSON.
JSONHttpRequest
Se você preferir usar responseJSON, mas deseja uma solução mais leve do que JQuery, você pode querer verificar meu JSONHttpRequest. Ele funciona exatamente como um XMLHttpRequest normal, mas também fornece a responseJSONpropriedade. Tudo que você precisa alterar em seu código é a primeira linha:
var req = new JSONHttpRequest();
JSONHttpRequest também fornece funcionalidade para enviar facilmente objetos JavaScript como JSON. Mais detalhes e o código podem ser encontrados aqui: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/ .
Divulgação completa: Sou o dono da Pixels | Bytes. Acho que meu script é uma boa solução para o problema, então o postei aqui. Por favor, deixe um comentário, se você quiser que eu remova o link.
XMLHttpRequest; exatamente sobre o que era a pergunta.