【发布时间】:2022-02-15 10:35:02
【问题描述】:
getUsers();
function getUsers(){
console.log('Start');
$.ajax({
url: 'https://jsonplaceholder.typicode.com/users',
method: 'GET',
dataType: 'json',
success: function (data) {
data.forEach(user => {
console.log(user.id);
});
},
error: function () {
console.log(data.status);
}
})
console.log('End');
}
上面的代码示例应该打印以下内容: 开始 身份证 ... 结束
但是它有以下问题: 数据的打印顺序错误。它打印 开始 结尾 数据对象
我知道这与异步有关,但我无法解决问题。我尝试了很多东西,比如 $.When() 承诺 异步/等待 但他们都没有帮助。
那么你能告诉我如何解决这个问题吗?
提前谢谢你
【问题讨论】:
-
据我所知,数据没有属性成功。所以你正在检查不存在的东西(data.success),所以它会转到 if 的另一个分支。它适用于 dataType: json,将 console.log(data) 放在 if 之前,您会看到响应,其中包含您期望的所有数据。
-
dataType 应该是文档中指定的字符串之一,即 xml、json、jsonp、html、脚本等,没有任何建议您在其中放置 mime 类型......文档没有说明什么如果你使用其他东西会发生,我假设它使用默认的“智能猜测”逻辑
-
It prints Start End data-object- 因为ajax中的第一个a代表asynchronous - 所以,是的,end在请求完成之前记录 - 那是异步 -
现在我已经更正了代码。现在它打印数据。正如我在帖子中提到的,我知道 ajax 是异步的,并且我尝试了很多解决方案。但我无法修复它。
-
您尝试了哪些方法,但没有成功?添加
.done(() => console.log("End"))就像在this answer 中一样,我会这样做,但还有很多其他选择
标签: javascript ajax asynchronous foreach