當我的頁面加載時,我需要立即啓動一個頁面的用戶控件之一的數據拉動,以填充某些搜索結果,該搜索結果顯示在該用戶控件的網格中。拉取這些搜索結果的查詢可能需要很長時間(8-10秒)。ASP.NET長時間運行的Ajax請求。頁面響應速度
我的目標是提出一個Ajax請求,只更新包含用戶控件的頁面部分,以便用戶可以自由地與頁面上的其他元素交互,而昂貴的用戶控件自己加載自己的數據。
在我目前的方法中,當控件加載時,用戶無法與頁面上的任何元素進行交互。當他們點擊頁面上其他地方的按鈕時,直到長時間運行的ajax請求完成纔會觸及按鈕點擊的回傳的Page_Load()。看來其他Ajax請求在長時間運行的後面排隊等待。
這裏是我的方法(使用Telerik控制爲阿賈克斯):
我有有一個隱藏的按鈕,其將使得阿賈克斯回發一個RadAjaxPanel。加載頁面時,此按鈕通過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>
調用按鈕,可以阿賈克斯回發的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。
謝謝!