【问题标题】:How to wait on the __doPostBack method to complete in javascript?如何等待 __doPostBack 方法在 javascript 中完成?
【发布时间】:2011-09-24 04:06:55
【问题描述】:

我正在使用 __doPostBack 方法来刷新 JavaScript 中的 UpdatePanel。我只想等待更新面板得到更新,然后执行后续的 javascript 代码。在进一步执行之前,如何等待异步方法完成(例如在我的情况下,异步方法是 __doPostBack)?我想使用 Thread.Join() 方法模拟它在 C# 中所做的方式。

【问题讨论】:

  • @anu 感谢您的回复,但您能给我举个例子吗?
  • this 会给你一个想法
  • 实际上我之前没有注意到您正在使用asp.net(我不知道)。那么,是否有任何回调函数可用于您的异步方法。如果是,那么您可以将后续的 js 代码放入该函数中,或者调用包含该回调函数中的提醒代码的其他函数

标签: javascript asp.net-ajax


【解决方案1】:

使用 Sys.WebForms.PageRequestManager endRequest 事件:

<script type="text/javascript" language="javascript">
    function clearPostBack() {
        $get('__EVENTTARGET').value = $get('__EVENTARGUMENT').value = '';
        Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(clearPostBack);

        // TODO: anything you want after __doPostBack
    }

    function myPostBack(eventTargetUniqueId, eventArgument) {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(clearPostBack);
        __doPostBack(eventTargetUniqueId, eventArgument);
    }
</script>

【讨论】:

  • 谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!这让我非常头疼。
  • 感谢您发布此答案。
【解决方案2】:

这是一个更好的方法,它允许您在成功请求和/或错误的情况下做一些事情:

$.ajax({
        type: "POST",
        data: 
        {
            '__EVENTTARGET': '<%=YourButtonName.ClientID %>'
        }
    }).done(function (data) {
        alert("ok");
    }).fail(function (p1, p2, p3) {
        alert("error");
    });

【讨论】:

  • 我喜欢这种方式,但遗憾的是这不是回发。这是一个新鲜的电话。因此,如果您在视图状态中有值,您将无法在服务器端使用它们。
  • 如果您有 UpdatePanel,Sys.WebForms.PageRequestManager 是正确的选择,否则这是一个很好的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
相关资源
最近更新 更多