为什么ajax在必要之后会返回价值?

时间:2012-09-20 06:10:31

标签: c# javascript .net ajax asp.net-mvc-3

@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,但它首先将temp值直接返回到<input .... onclick=...>,然后执行ajax。

我开始知道ajax执行将是异步的。所以我尝试了ajax的OnBegin事件但是没有返回值。请在这两个问题中提供一些解决方案。

由于

2 个答案:

答案 0 :(得分:1)

将此输入button(或者总是从OpenErrorPopup返回false)并通过$('form#xxx').submit()在OpenErrorPopup中提交表单。

答案 1 :(得分:1)

如果您在同一个域上进行ajax调用,则可以指示jQuery.ajax同步。只需将“async:false”传递给ajax选项:

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

        success: function (UserLoggedOn) { ...

并且不需要从成功和错误回调中返回tmp,只需初始化它。