Новые способы I: fetch
TL; DR Я бы рекомендовал этот способ, если вам не нужно отправлять синхронные запросы или поддерживать старые браузеры.
Если ваш запрос является асинхронным, вы можете использовать Fetch API для отправки HTTP-запросов. API-интерфейс fetch работает с обещаниями , что является хорошим способом обработки асинхронных рабочих процессов в JavaScript. При таком подходе вы используете fetch()для отправки запроса и ResponseBody.json()анализа ответа:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
Совместимость: Fetch API не поддерживается IE11, а также Edge 12 и 13. Однако есть полифилы .
Новые способы II: responseType
Как написал Лондерен в своем ответе , новые браузеры позволяют использовать responseTypeсвойство для определения ожидаемого формата ответа. Затем к проанализированным данным ответа можно получить доступ через responseсвойство:
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);
Совместимость: responseType = 'json'не поддерживается IE11.
Классический способ
Стандартный XMLHttpRequest не имеет responseJSONсвойства, только responseTextи responseXML. Пока bitly действительно отвечает некоторым JSON на ваш запрос, он responseTextдолжен содержать код JSON в виде текста, поэтому все, что вам нужно сделать, это проанализировать его с помощью 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);
Совместимость: этот подход должен работать с любым браузером, который поддерживает XMLHttpRequestи JSON.
JSONHttpRequest
Если вы предпочитаете использовать responseJSON, но хотите более легкое решение, чем JQuery, вы можете проверить мой JSONHttpRequest. Он работает точно так же, как обычный XMLHttpRequest, но также предоставляет responseJSONсвойство. Все, что вам нужно изменить в своем коде, это первая строка:
var req = new JSONHttpRequest();
JSONHttpRequest также предоставляет функциональные возможности для простой отправки объектов JavaScript в формате JSON. Более подробную информацию и код можно найти здесь: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/ .
Полное раскрытие: я владелец Pixels | Bytes. Думаю, мой сценарий - хорошее решение проблемы, поэтому разместил его здесь. Пожалуйста, оставьте комментарий, если хотите, чтобы я удалил ссылку.
XMLHttpRequest; о чем был вопрос.