0

好的,所以我有一个模糊的问题。我知道问题所在和解决方案,但我不明白为什么。

有一种方法可以逐步完成一些准备工作、验证、保存和清理。我们在几个不同的情况下都有这个逻辑。我希望了解为什么第一种方法有效但第二种方法显示“doneMessage”的损坏图像是否有丢失的参考或类似的东西?

我想我会在刷新页面之前得到关于为什么 UI 被阻止的问题。在调用此方法之前,UI 被一条请等待消息阻塞,该消息完美运行。这只是对用户的视觉确认,即在刷新页面之前确实发生了保存。

AjaxCall 的代码只是一个简单的 JSON AJAX 调用。如果需要,我可以发布代码,但我认为它与问题无关。

这适用于 AJAX 调用的成功处理程序中的 $.blockUI 调用

    function Step(stepNumber) {
        switch (stepNumber) {
            case 1:
                ajaxParameters = "blah:'" + blah + "', yada:" + yada;
                setTimeout(function () { Step(2) }, 50);
                break;
            case 2:
                AjaxCall("FormStyle.aspx", "Validate", ajaxParameters, function () {
                    setTimeout(function () { Step(3) }, 50);
                });
                break;
            case 3:
                AjaxCall("FormStyle.aspx", "Save", ajaxParameters, function () {
                    $.blockUI({ message: doneMessage, css: { padding: 5} });
                    setTimeout(function () { RefreshCurrentPage() }, 50);
                });
                break;
        }
    }

然而,事实并非如此。它显示损坏的图像:

    function Step(stepNumber) {
        switch (stepNumber) {
            case 1:
                ajaxParameters = "blah:'" + blah + "', yada:" + yada;
                setTimeout(function () { Step(2) }, 50);
                break;
            case 2:
                AjaxCall("FormStyle.aspx", "Validate", ajaxParameters, function () {
                    setTimeout(function () { Step(3) }, 50);
                });
                break;
            case 3:
                AjaxCall("FormStyle.aspx", "Save", ajaxParameters, function () {
                    setTimeout(function () { Step(4) }, 50);
                });
                break;
            case 4:
                $.blockUI({ message: doneMessage, css: { padding: 5} });
                RefreshCurrentPage()
                break;
        }
    }
4

1 回答 1

0

确保设置了 ajax 参数async: false。这将确保您的代码在此代码完成之前不会执行任何其他操作。

于 2012-12-12T17:25:44.983 回答