2

加载页面时,commentsShowHideEffectjavascript中的函数运行。当发出 ajax 请求时,方法中的所有指令commentsShowHideEffect()都消失了。commentsShowHideEffect()ajax请求后如何恢复这些指令或再次调用方法?

<script>
    $(function () {
        commentsShowHideEffect();
    });
</script}

 <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="MessageButton" />
    </Triggers>
    <ContentTemplate>
        <asp:Timer ID="RefreshTimer" runat="server" Interval="500" />
            <asp:DataList ID="ChatDataList" runat="server" >
                <ItemTemplate>    
                    <td><asp:Label ID="lblRaterName" runat="server" Text='<%# Eval("Text")%>'></asp:Label></td>
               </ItemTemplate>
            </asp:DataList>
     </ContentTemplate>
</asp:UpdatePanel>
4

3 回答 3

2

您可以绑定Sys.WebForms.PageRequestManager endRequest事件,该事件将在更新面板完成 ajax 请求后触发。

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args)
{
     alert("After ajax call ended");
}
于 2013-02-27T10:40:43.670 回答
1

在 jQuery 范围之外定义 commentsShowHideEffect:

<script>
    function commentsShowHideEffect() {
        //do something
    }

    $(document).ready(function (){
        commentsShowHideEffect();
    });
</script>

此外,我更喜欢使用 document.ready 语法,因为程序员更容易理解它是什么。

于 2013-02-27T10:36:13.163 回答
1

你没有在你的问题中提到 jQuery,也没有在标签中提到。但是您的代码表明您正在使用它,所以这里有一个相关文档页面的链接:

http://api.jquery.com/ajaxComplete/

在您的情况下,这应该有效:

$(document).ajaxComplete(function(event,request, settings) {
   commentsShowHideEffect();
});

请注意,上述内容将针对每个 ajax 请求触发。如果您想要更多控制权,您应该对各个请求使用完成或成功回调。

于 2013-02-27T10:40:35.543 回答