javascript - 有没有办法在 jQuery AJAX 调用上触发 done 函数?
问题描述
我有一个功能应该只在 AJAX 调用完成后才能继续,但如果我的本地存储中已经有上次会话的数据,我希望能够跳过该 AJAX 调用。
我当前的代码:
$.when(getAddresses()).done(function (data) {
addresses = data.data;;
localStorage['addresses'] = JSON.stringify(addresses);
{{Rest of the code that should be executed after the AJAX call}}
}
提前致谢!
解决方案
反过来做。
在本地检查数据,如果您已经拥有它,甚至不要发送请求。
将数据包装在一个 Promise 中,这样无论您从哪里获取数据,它都将始终具有相同的 API。
async function get_data() {
let addresses = localStorage.getItem('addresses');
if (addresses) {
return JSON.parse(addresses);
}
let ajaxData = await getAddresses();
addresses = ajaxData.data;
localStorage.setItem('addresses', JSON.stringify(addresses));
return addresses;
}
get_data().then(data => {
// Rest of the code that should be executed after the AJAX call
});
另一种方法是忘记 localStorage 并让 Web 服务设置合适的缓存标头。然后您可以发出 HTTP 请求,但如果缓存信息显示浏览器缓存包含最新数据,则根本不会发出 HTTP 请求。
您不需要重新发明数据的本地缓存。HTTP 已经融入其中。
推荐阅读
- python - 如何将 Delaunay 三角剖分复制到新点?
- praat - 是否可以在 praat 中自动添加层级
- jquery - 使用 jquery 在 cakephp 2.x 中创建动态下载 html 链接
- c# - C# ASP.NET:如何为每种方法自动解码我的不记名令牌?
- apache-spark - Apache Spark:如何从 hdfs 文件中读取
- keras - 使用 Keras,构建 CNN 模型对图像进行分类
- javascript - 将 webpack 与 react 一起使用时出现错误
- php - 使用 json 编码的 php 数组中的 Google 图表
- ios - NavigationController 在以编程方式呈现后在 Swift 中为零
- javascript - React Native - 数组对象到 AsyncStorage