【问题标题】:Why ajax is returning value after its necessity?为什么 ajax 在必要后返回值?
【发布时间】:2012-09-20 06:10:30
【问题描述】:
@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值直接返回给&lt;input .... onclick=...&gt;,然后执行ajax。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    $.ajax({
            cache: false,
            async:false,
            url: "/xyz/ChecLogin/",
    
            success: function (UserLoggedOn) { ...
    

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

    【讨论】:

    • 不要。曾经。曾经。做。它。请。当您的服务器正在处理请求时,它会“冻结”客户端的浏览器。
    • 哦 :( 最好的解决方案是什么?
    • @Alex:eek 同步是万恶之源。如果您的页面加载需要 10 秒怎么办。你想要一个“悬挂”的网页吗?
    • 或者在浏览器坏的情况下 - 浏览器挂起。
    • ajax成功函数不超过一行,所以可能不会挂掉浏览器。
    【解决方案2】:

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

    【讨论】:

    • 这个'form#xxx'应该是什么??它应该是 UpdateTargetId 中给出的值吗?还是按钮的id??因为我尝试使用按钮 ID“编辑”,但它不起作用。
    • 包含您的提交按钮。
    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2022-01-14
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多