javascript - 如何保证一个 ajax 调用在调用另一个之前完成?
问题描述
我正在开发一个烧瓶应用程序,并且有一个与表单相关联的 javascript 函数
function applyQueries() {
// does some things
if(currentCatalog != ''){
addCatalogFilters(currentCatalog);
}
$.ajax({
type: 'POST',
url: "/applyQueries",
contentType: "application/json",
success:function(response){
// does some stuff here
})
}
addCatalogFilters() 函数也是一个ajax 调用。这两个调用都改变了 python 方面的一些变量。我想知道的是,是否保证第一个 ajax 调用(在 addCatalogFilters 中)在第二个调用之前执行并返回。我最终得到了奇怪的结果,这些结果似乎是基于 ajax 调用执行顺序的竞争条件。像这样结构的代码可以做到这一点吗?另外,如果是这样,我该如何解决?
// Add user catalog filters
function addCatalogFilters() {
catalog = currentCatalog;
formData = new FormData(document.getElementById('catalogFilterForm'));
$.ajax({
type: 'POST',
url: "/addCatalogFilters",
data: formData,
processData: false,
contentType: false,
success: function (response){
document.getElementById(catalog + 'close').style.display = 'block';
document.getElementById(catalog + 'check').style.display = 'none';
addBtns = document.getElementsByClassName("addBtn");
removeBtns = document.getElementsByClassName("removeBtn");
for (i = 0; i < addBtns.length; i++) {
addBtns[i].style.display = "none";
removeBtns[i].style.display = "inline-block";
}
}
})
};
解决方案
您可以确保使用 ajax 的成功功能。首先调用一个 ajax(比如说 ajax1),然后在第一个 ajax 调用的成功函数(ajax1 成功函数)中调用另一个 ajax 调用。
addCatalogFilters(currentCatalog)
{
$.ajax({
type: 'POST',
url: "/the-post-usl",
success:function(response){
$.ajax({
type: 'POST',
url: "/applyQueries",
contentType: "application/json",
success:function(response){
// does some stuff here
});
})
}
function applyQueries() {
// does some things
if(currentCatalog != ''){
addCatalogFilters(currentCatalog);
}
}
这可能不是最佳方式。但要保证一个 ajax 调用在调用另一个之前完成。
推荐阅读
- python - 如何让'for'循环更高效、更快速?
- c# - VS 2019 中的 SQLite 实现
- javascript - TypeError:无法读取 null 的属性“方法”
- outlook - 在 Outlook 中同时为多条记录从“跟踪到 Dynamics 365(无法传递)”切换到“跟踪到 Dynamics 365”类别
- c# - ConfigureServices 中的 IConfiguration 错误
- opencl - OpenCL 的选择运算符有什么用?
- java - Android 上的 BufferedInputStream - 无效参数错误
- reactjs - 如何在反应本机功能组件中插值
- django - 在 Django 中使用基于异步类的视图的正确方法
- mysql - 从 tcpdump 中提取 mysql 查询