0

サブミット イベントが ajax 呼び出しを待たずに完了することがあるという問題があります。ここで何が起こっているのか本当にわかりません。待機しているように見えることもあり、成功と完了のメッセージが表示されることもあれば、待機せずに送信アクションを起動して次のページをロードすることもあります。

function SetUpAjax() {
    $.ajaxSetup({
        data: "{}",
        dataType: "json",
        type: "POST",
        contentType: "application/json"
    });
}

function SaveBooking(booking) {
    $.ajax({
        url: HOST + "api/SaveBooking",

        data: JSON.stringify({
            booking: booking
        }),
        success: function(resdata) {
            alert("SaveBooking Saved")
        }
    });
}

$(document).ready(function() {
    SetUpAjax();
});



function Generate() {
    if ($('#addbookingaction').valid()) {

        try {
            var booking = GetBookingFromForm()
        } catch (err) {
            alert("error" + err)
            return false
        }

        $.when(SaveBooking(booking)).done(function(data, textStatus, jqXHR) {
            alert("Booking Saved")
            return true
        }).fail(function(data) {
            alert("Save Booking failed")
            return false
        })
    } else {
        return false;
    }
}

// Pug html
input(type = "submit", id = "save", name = "save", value = "Save", onclick = "return Generate()")

私の理解では、「いつ」の呼び出しは、SaveBooking ajax 関数が true または false を返す前に完了するまで待機する必要があります。ただし、Ajax が実行される前に Generate 関数が true を返すことがあるように思われるため、「保存済み」アラートは表示されません。サーバーの応答を確認すると、常に応答成功です。

Generate 関数の最後に return false を配置すると、常に「保存済み」アラートが表示されますが、onclick イベントが false を返すため、ページは終了しません。

ここで気が狂いそうです。動作に一貫性がない理由がわかりません (おそらく競合状態ですか?)。誰でも助けになれますか?

4

0 に答える 0