我的新方法:fetch
TL;DR只要您不必发送同步请求或支持旧浏览器,我会推荐这种方式。
只要您的请求是异步的,您就可以使用Fetch API发送 HTTP 请求。fetch API 与promises一起使用,这是在 JavaScript 中处理异步工作流的好方法。使用这种方法,您fetch()
可以发送请求并ResponseBody.json()
解析响应:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
兼容性:IE11 以及 Edge 12 和 13 不支持 Fetch API。但是,有polyfills。
新方式二:responseType
正如Londeren在他的回答中所写,较新的浏览器允许您使用该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
and 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 还提供了以 JSON 格式轻松发送 JavaScript 对象的功能。更多细节和代码可以在这里找到:http: //pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/。
全面披露:我是 Pixels|Bytes 的所有者。我认为我的脚本是原始问题的一个很好的解决方案,但今天它已经过时了。我不建议再使用它了。