Новые способы 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
; о чем был вопрос.