0

jquery フォーム プラグインを使用して、MVC アプリケーションにフォームを送信しています。問題は、私のコールバック「成功」コールバック関数にあります。この関数では、私が持っている他の JavaScript 関数を 2 回呼び出します。1 つはページの一部を更新し、もう 1 つはページの別の部分でユーザーにメッセージを投稿します。

問題は、これらのうちの 1 つだけが実行されることです。コールバック関数の最初に置いたものです。最初の関数から値を明示的に返して、制御をコールバック関数に戻そうとしましたが、うまくいきません。このコードを頻繁に使用し、1 つの場所にまとめておきたいので、2 つの別個の関数を削除したくありません。

これがコードです。(警告ステートメントは、それが機能していなかったことを証明するためだけにそこにあります)

 function ShowProposedDate_Submit() {
    // prepare Options Object 
    var options = {
        dataType: 'json',
        success: function (responseText) {
            $("#blankModal").dialog("close");
            var ret = RefreshGrid(); //this function will execute but will not return
            alert(ret); //this statement won't execute
            PostMessage(responseText.msg); //this function won't execute



        },
        error: function (responseText) {
            $("#feedback").html(responseText.msg);
        }
    };

    // pass options to ajaxForm 
    $('#showProposedDate').ajaxForm(options);
}

追加機能はこちら。

 function PostMessage(message) {
    $('.message_wrap').remove();
    $("<div></div>)").addClass("message_wrap")
                 .text(message)
                 .prependTo(".grid_20");
    KillMessage();
}

function RefreshGrid() {
    $.get("/workitems/list", function (data) {
        $("#grid").replaceWith(data);
        getAvailableActions(0);
        getMoreDetails(0);
        ResetCheckbox();
        return 0;
    });
}

これらの各機能は、順番に最初に配置すると完全に機能します。両方を実行できない理由はありますか?

4

2 に答える 2

0

RefreshGrid は何も返しません。$.get() 関数は非同期であるため、コールバックが登録され、RefreshGrid は .get が完了する前に関数から返されます。get 関数は後で 0 を返しますが、変数には格納されません。

于 2011-01-13T21:16:22.897 に答える
0

どこかでエラーが発生していると思います..これを試して判断してください。

 function ShowProposedDate_Submit() {
    // prepare Options Object 
    var options = {
        dataType: 'json',
        success: function (responseText) {
            $("#blankModal").dialog("close");
            try { RefreshGrid(); } catch ( err ) { alert("Error: " + err); }
            try { PostMessage(responseText.msg); } catch ( err ) { alert("Error2: " + err); }



        },
        error: function (responseText) {
            $("#feedback").html(responseText.msg);
        }
    };

    // pass options to ajaxForm 
    $('#showProposedDate').ajaxForm(options);
}
于 2011-01-13T21:16:47.920 に答える