0

わかりました、それで、私はある種のあいまいな質問をします。問題と解決策はわかっていますが、その理由がわかりません。

いくつかの準備作業、検証、保存、およびクリーンアップを段階的に行う方法が 1 つあります。このロジックは、いくつかの異なるインスタンスで使用できます。最初の方法が機能する理由について洞察を得たいと思っていましたが、2番目の方法では「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 に答える