javascript - 使用带有异步功能的 ajax 获取数据
问题描述
在第一个示例中,我使用ajax
using获取数据XMLHttpRequest
,它工作正常
示例 1
let req = new XMLHttpRequest();
req.open(
"GET",
"https://raw.githubusercontent.com/freeCodeCamp/ProjectReferenceData/master/global-temperature.json"
);
let res = {};
req.onload = () => {
res = JSON.parse(req.responseText);
};
req.send();
window.onload = _ => {
console.log(res);
};
但我想用这个async
函数来保存和最小化我的代码,function
这就是我尝试的
示例 2
async function res() {
let req = new XMLHttpRequest();
req.open(
"GET",
"https://raw.githubusercontent.com/freeCodeCamp/ProjectReferenceData/master/global-temperature.json"
);
let res = {};
req.onload = () => {
res = JSON.parse(req.responseText);
};
req.send();
return await res;
}
window.onload = _ => {
console.log(res());
};
但它log
在console
每一次
Promise {<pending>}
解决方案
您也可以使用fetch函数,它是一种更现代的获取数据的方法。
例子:
const httpRequest = async () => {
try {
const response = await fetch('http://example.com/movies.json');
return await response.json();
} catch(e) {
console.err(e);
}
}
要解决您的问题,请尝试使用:
function request() {
return new Promise((resolve, reject) => {
let req = new XMLHttpRequest();
req.open(
"GET",
"https://raw.githubusercontent.com/freeCodeCamp/ProjectReferenceData/master/global-temperature.json"
);
req.onload = () => {
resolve(JSON.parse(req.responseText));
};
req.send();
})
}
function res() {
request().then(data => console.log(data));
}
window.onload = _ => {
console.log(res());
};
推荐阅读
- python-3.x - Python中带有字符串的3D散点图
- git - 源树 GIT 推送失败,出现错误“远程端意外挂断”
- meteor - Meteor MUP 使用 ssh ed25519 验证失败
- ios - iframe 中的按钮有时无法在 Safari iOS 上单击
- mamp - Mamp 不启动 mysql
- jquery - 通过单击外部文件内部的链接将外部文件加载到索引模板中
- python-3.x - 我应该将什么 IP 地址传递给 python 服务器程序以使其在 AWS EC2 上运行?
- swift - UICollectionView 中 cellForItemAt 的滚动单元格问题
- image-processing - 使用 ImageMagick 进行 OCR 图像预处理
- asp.net-core - 记录 .net core REST api 返回的所有数据