ajax中的Ext.Msg.show不会附加页面

时间:2015-05-06 09:59:36

标签: ajax extjs

我有保存数据的功能。在保存数据之前,有对话框确认是或否。当我单击选项是时,此后面的页面将返回到gridview(它的列表)。我想要的是点击是,后面的页面不会改变。

这是我的功能:

function SaveData(StatusSubmit) {
        var d = ControlToData();
        if (state == FormState.ADD) {
            ShowLoading("sa-body", "Updating data .. Please Wait ...");
            $.ajax({
                url: root + "PF/Add?status=" + StatusSubmit,
                type: 'POST',
                dataType: "json",
                contentType: 'application/json',
                data: JSON.stringify(d),
                success: function (result, status, xhr) {
                    storePF.add(
                        {
                            PFID: result.PF.PFID
                        , Title: result.PF.Title
                        });

                    ChangeFormState(FormState.VIEW);
                    tabs.setActiveTab('pageGrid');

                    if (result.ErrorMail.length > 0) {
                        alert("Error while sending email !\nError description : " + result.ErrorMail + "\nPlease contact your System Administrator !");
                    }

                    if (result.Error.length > 0) {
                        var str = "<br/><br/><span style='color:red;font-weight:bold'>Success add new PF !</span>";
                        MsgBox2("Budget Validation", result.Error + str);
                    }
                    else
                        MsgBox("Success add new PF !");
                },
                complete: function () {
                    HideLoading();
                }
            });
        } 
    }

我添加了这样的新对话框确认,但它不起作用(单击是按钮后没有附加页面):

function SaveData(StatusSubmit) {
        var d = ControlToData();
        if (state == FormState.ADD) {
            ShowLoading("sa-body", "Updating data .. Please Wait ...");
            $.ajax({
                url: root + "PF/Add?status=" + StatusSubmit,
                type: 'POST',
                dataType: "json",
                contentType: 'application/json',
                data: JSON.stringify(d),
                success: function (result, status, xhr) {
                    storePF.add(
                        {
                            PFID: result.PF.PFID
                        , Title: result.PF.Title
                        });

                    ChangeFormState(FormState.VIEW);
                    tabs.setActiveTab('pageGrid');

                    if (result.ErrorMail.length > 0) {
                        alert("Error while sending email !\nError description : " + result.ErrorMail + "\nPlease contact your System Administrator !");
                    }

                    if (result.Error.length > 0) {
                              $.post(root + "PF/GetSetupName", function (datas) {
                        if (datas == "FILTER_BRAND") {
                            Ext.Msg.show({
                                title: 'Over Budget',
                                msg: 'Budget is over. Modify or Not ?',
                                fn: function (btn) {
                                    if (btn == "yes") {
                                        SaveData("none");
                                    }
                                    else {
                                        CancelData();
                                    }
                                },
                                buttons: Ext.Msg.YESNO,
                                icon: Ext.Msg.QUESTION
                            });
                        }
                    });
                    }
                    else
                        MsgBox("Success add new PF !");
                },
                complete: function () {
                    HideLoading();
                }
            });
        } 
    }

我也尝试在另一个函数中分离这个Ext.Msg.show。但它不起作用。请问有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我发现当我尝试同时执行掩码和ajax请求时,Ext会不堪重负并且无法正确显示掩码。

要解决此问题,我会延迟执行我的ajax请求,直到Ext&amp;浏览器有足够的时间来正确显示掩码。它通常不需要太多时间。在下面的示例中,它会在发布前等待50毫秒。

Ext.get(document.body).mask("Updating data .. Please Wait ...", 'x-mask-loading');

Ext.defer(function() {
    Ext.Ajax.request({ ... });
}, 50);

这使浏览器有足够的时间在必须执行任何其他操作之前呈现屏蔽。