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 responseType
propriedade para definir o formato esperado da resposta. Os dados de resposta analisados podem ser acessados por meio da response
propriedade:
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 responseJSON
propriedade, apenas responseText
e responseXML
. Contanto que o bitly realmente responda com algum JSON à sua solicitação, responseText
deve 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 XMLHttpRequest
e 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 responseJSON
propriedade. 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.