私はいくつかのネストされた 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
}
});
}
他の2つの異なるポイントから呼び出すため、機能しています。
$("#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 呼び出しの終了を待っておらず、未定義を返していることです。https://stackoverflow.com/a/11283748/836697に示されているように、Promise インターフェイスを使用していると思いましたが、方法がわかりません。