私はもともとreturn true/falseajax コールバックに を持っていましたが、おそらく呼び出すのに適切なコンテキストではないことに気付いたので、関数を次のように書き直しましたが、まだ機能していません。送信変数もコールバック関数から引き継がれていませんか? 確認 ( if .btn-danger) は機能していますが、送信を押して確認が不要な場合だけではありません)
$('#form').submit(function(e){
    var submit = false;
    if($('.btn-danger').length){
        submit = true;
    } else {
        $.ajax({
            url: base_path+"ajax/myajaxfile",
            type: "post",
            data: {
                data1 : $("#amount").val(),
                data2 : $("option:selected").val()
            },
            dataType: "json",
            success: function(data) {
                if (data.needconfirmation === 'true'){
                        $('#edit-submit').val("Confirm");
                        $('#edit-submit').removeClass("btn-primary");
                        $('#edit-submit').addClass("btn-danger");
                        $('#payment-form').after('<span class="warning"> Do you really wanna?</span>');
                } else {
                    submit = true;
                }
            },
            error: function(data) {
                alert("an error has occurred");
            }
        });
    }
    if (submit){
        return true;
    } else {
        return false;
    }
});