1
@using (Ajax.BeginForm("Edit", "xyz", new AjaxOptions { 
    InsertionMode = InsertionMode.Replace, 
    HttpMethod = "POST", 
    UpdateTargetId = "divDisplay", 
}))

{

<input type="submit" value="Edit" id="Edit" class="formBtn" onclick='return OpenErrorPopup()'/>

}


<script type="text/javascript" language="javascript">

function OpenErrorPopup() {

        debugger;
        var temp = false;

        $.ajax({
            cache: false,
            url: "/xyz/ChecLogin/",

            success: function (UserLoggedOn) {
                debugger;
                if (UserLoggedOn == "True") {
                    if (condition) {
                        temp = false;
                        return temp;
                    }
                    else {
                        temp = true;
                        return temp;
                    }
                }
                else {
                    temp = false;
                    return temp;
                }
            },

            error: function (err) {
                temp = false;
                return temp;
            }
        });        

        debugger;              
        return temp;

    }
</script>

予想:最初にopenErrorPopupを呼び出し、ajaxを実行してから、値を動的に返します。

実際:openErrorPopupが呼び出されますが、最初に一時値をに直接返し、<input .... onclick=...>次にajaxを実行します。

ajaxの実行は非同期になることがわかりました。そこで、ajaxのOnBeginイベントを試しましたが、値が返されません。これら2つの問題のいずれかについて解決策を提供してください。

ありがとう

4

2 に答える 2

1

この入力をbutton行い(またはOpenErrorPopupから常にfalseを返します)、を介してOpenErrorPopup内にフォームを送信し$('form#xxx').submit()ます。

于 2012-09-20T06:16:55.687 に答える
1

同じドメインでajax呼び出しを行う場合は、jQuery.ajaxに同期するように指示できます。「async:false」をajaxオプションに渡すだけです。

$.ajax({
        cache: false,
        async:false,
        url: "/xyz/ChecLogin/",

        success: function (UserLoggedOn) { ...

成功とエラーのコールバックからtmpを返す必要はなく、初期化するだけです。

于 2012-09-20T06:44:08.843 に答える