Javascript主函数在子函数内部之前首先触发

时间:2016-11-11 08:13:33

标签: javascript jquery asp.net-mvc asp.net-mvc-4 jquery-ui

我有一个简单的对话框,我的MVC项目上有一个Save and Cancel按钮。在保存按钮上,我需要触发一个返回值的函数,该值将用于我的if和else条件。

问题是即使我把这个功能放在我的保存按钮上,它也不会先触发。这是我的代码:

 $("#divMain").dialog({
            modal: true,
            autoOpen: false,
            buttons: {
                "SAVE": function () {
                    var returnValue = fncApprove();
                    alert("Second");

                    //if and else condition here based on the returnValue variable 
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            },
            close: function () {
            }
        });

我在保存对话框中调用的功能 fncApprove

function fncApprove() {
        var objData = $('form').serialize();
        $.ajax({
            cache: false,
            url: '@Url.Action("Approve", "Main")',
            data: objData,
            type: 'POST',
            traditional: true,
            success: function (data) {
                alert("First");

            },
            error: function () {
            }
        });
    }

这样做的输出是首先出现警告框“第二”而不是“第一”警告框。我是否需要在此修改内容以便首先显示“第一”?

1 个答案:

答案 0 :(得分:2)

使fncApprove返回回调,然后执行if和else

function fncApprove(callback) {
    var objData = $('form').serialize();
    $.ajax({
        cache: false,
        url: '@Url.Action("Approve", "Main")',
        data: objData,
        type: 'POST',
        traditional: true,
        success: function (data) {
            alert("Success");
            callback(data);
        },
        error: function (error) {
           alert("Error");
           callback(error);
        }
    });
}



 $("#divMain").dialog({
        modal: true,
        autoOpen: false,
        buttons: {
            "SAVE": function () {
                fncApprove(function(returnVal) {
                      alert("CallBack");
                      //if and else condition
                });

            },
            "Cancel": function () {
                $(this).dialog("close");
            }
        },
        close: function () {
        }
    });