我有4个Ajax函数,第一个是独立的,
但是其他三个功能都取决于之前的功能。
真实的例子:
我有国家,省,区,镇和路
可以直接致电国家
而所有其他人必须等到
我确保所有功能都正常运行,并且它们获取数据,
“因此,ajax请求没有问题”。
在尝试了这两种方法之后:
0x100e44228
我也尝试过 done 方法:
$.when(GetCountry()).then(function(){
GetGovernerate();
}).then(function(){
GetDistrict(GovernerateID);
}).then(GetTown(DistrictID)).then(function(){
GetRoad(TownID)
});
结果是它们两个都获得了省级元素,其余所有元素都不被调用(已解析)。 我已经在控制台上查找了任何错误, 但没什么可显示的。
我为此做了一个示例,但这并不像回调函数那样有效:
$.when(GetCountry()).done(function(){
GetGovernerate();
}).done(function(){
GetDistrict(GovernerateID);
}).done(GetTown(DistrictID)).done(function(){
GetRoad(TownID)
});
我已经研究了jquery的解释,但并没有理解。 任何人都可以让我更容易理解它吗。
答案 0 :(得分:3)
这是您的有效代码。我必须添加sleep
来模拟ajax延迟。
您的问题是您没有返回对函数调用的承诺。
//Chain one after another using previous object
$.when(GetCountry()).then(function() {
return GetGovernerate();
}).then(function() {
return GetDistrict();
}).then(function() {
return GetTown();
}).then(function() {
return GetRoad();
}).done(function() {
$("body").append("<p>all done</p>");
});
//all needed functions
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function GetCountry() {
$("body").append("GetCountry<br>");
return sleep(1000);
}
function GetGovernerate() {
$("body").append("GetGovernerate<br>");
return sleep(1000);
}
function GetDistrict() {
$("body").append("GetDistrict<br>");
return sleep(1000);
}
function GetTown() {
$("body").append("GetTown<br>");
return sleep(1000);
}
function GetRoad() {
$("body").append("GetRoad<br>");
return sleep(1000);
}