加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET长期运行的Ajax请求.页面响应

发布时间:2020-12-16 09:56:26 所属栏目:asp.Net 来源:网络整理
导读:当我的页面加载时,我需要立即在页面的一个用户控件中启动数据拉取,以便填充在该用户控件的网格中显示的一些搜索结果.拉取这些搜索结果的查询可能需要相当长的时间(8-10秒). 我的目标是使Ajax请求只更新包含用户控件的页面部分,以便用户可以自由地与页面上的
当我的页面加载时,我需要立即在页面的一个用户控件中启动数据拉取,以便填充在该用户控件的网格中显示的一些搜索结果.拉取这些搜索结果的查询可能需要相当长的时间(8-10秒).

我的目标是使Ajax请求只更新包含用户控件的页面部分,以便用户可以自由地与页面上的其他元素交互,而昂贵的用户控件自己加载它自己的数据.

在我当前的方法中,当加载该控件时,用户无法与页面上的任何元素进行交互.当他们点击页面上其他位置的按钮时,在长时间运行的ajax请求完成之前,不会达到按钮单击的回发的Page_Load().似乎其他Ajax请求在长期运行的请求之后排队等待.

这是我的方法(用于Ajax的Telerik控件):

我有一个RadAjaxPanel有一个隐藏按钮,将导致Ajax回发.页面加载时,通过Javascript单击此按钮.在按钮的单击处理程序中,有代码将用户控件加载到ContentPlaceHolderControl并加载控件的数据

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="LoadingPanel1">
                <asp:PlaceHolder runat="server" ID="PlaceHolderControl">

                      <!-- user control loaded here -->

                    <telerik:RadButton ID="btnRADAjax" runat="server" Style="visibility: hidden;"></telerik:RadButton>

                </asp:PlaceHolder>

调用按钮执行Ajax PostBack的Javascript:

function DoAjaxPostBack() {


            var interval = setInterval(function() 
                {
                    if(document.readyState === 'complete') 
                    {
                        var argmnt='';
                         var ajaxManager =  $find("<%=RadAjaxManager.GetCurrent(Page).ClientID %>");
                        ajaxManager.ajaxRequestWithTarget('<%= btnRADAjax.UniqueID %>',argmnt);

                        clearInterval(interval);
                    }
                 },100)
       }

在页面上:

If Not IsPostBack Then
            RadScriptManager.RegisterStartupScript(Page,Page.GetType(),"1","DoAjaxPostBack('');",True)
 End If

这是一个合理的方法,并且没有办法让Ajax请求互相阻塞吗?或者是否有另一种方法可以让长时间运行的请求在它自己的世界中单独运行,而不会干扰它所依赖的页面的响应性?我正在考虑尝试IFrame.

谢谢!

解决方法

我不知道RadAjaxPanel是如何工作的,但我认为你正在使用ASP.NET的Session Lock系统.

默认情况下,您无法在ASP.NET中使用同一会话运行两个并发请求.
因此,您需要8-10秒的长请求将阻止所有后续请求,直到完成为止.这就是为什么在第一个请求完成之前不会到达Page_Load()的原因.

您可以尝试调整页面的EnableSessionState属性以禁用锁定.

有关更多信息,请参阅此帖子:

I just discovered why all ASP.Net websites are slow,and I am trying to work out what to do about it

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读