【发布时间】:2013-07-22 13:12:13
【问题描述】:
我有一个带有多个嵌套 ajax 调用的 jQuery 函数:
function ulozitKlienta () {
//some code
if (!confirm("Není vyplněno datum vstupu klienta!\n\nPřesto uložit?")) return false;
$.ajax({
type : "POST",
cache : false,
url : "ajax/ulozit_klienta.php",
data : JSON.stringify(out),
dataType: "json",
success : function (data) {
if (data.vysledek == "chyba") {
//some code
return false; // TODO ajax return
} else {
if (out["akce"] == "pridat") {
if (data.vysledek == "duplikat") {
$("#js-d-duplikat").dialog({
modal : true,
buttons : {
"Přesto vytvořit nového" : function () {
out["opravdu"] = true;
$.ajax({
type : "POST",
cache : false,
url : "ajax/ulozit_klienta.php",
data : JSON.stringify(out),
dataType: "json",
success : function (data) {
if (data.vysledek == "chyba") {
//some code
return false; // TODO ajax return
} else //some code
},
error : function (data, status, e) {
//some code
return false; // TODO ajax return
}
});
}
}
});
} else //some code
} else //some code
}
},
error : function (data, status, e) {
//some code
return false; // TODO ajax return
}
});
}
我有它的功能,因为我从其他地方的两个不同点调用它:
$("#add_tab").on("click", function() { // založí nový protokol a vytvoří mu tab
if (!ulozitKlienta()) return false;
//some code
});
$("#menu_local").on("click", "[name='ulozit_klienta']", function() {
ulozitKlienta();
});
我的问题是,函数 ulozitKlienta 没有等待 ajax 调用结束并且返回未定义。我以为我使用了这里显示的 Promise 接口https://stackoverflow.com/a/11283748/836697,但我真的不知道如何。
【问题讨论】:
-
我不能使用任何提供的答案。 async:false 是不可能的。并且如图所示使用回调或承诺不适合我的情况。我需要定义,而不是立即使用该函数一次,并在恰好位于.on() 中的代码中的两个不同点使用它,因此它们是基于交互调用的。我坚信承诺是正确的方式,我只是不知道如何。