2011-07-27 45 views
4

我有兩個回發事件,第二個被中止第一個ASP.NET網頁。第二個一旦完成就不會按預期呈現。ASP.NET AJAX回傳中止

詳細

我有一個ASP.NET網頁,有效地包含兩個鏈接按鈕。它使用Telerik的ASP.NET AJAX控件,但我不知道,如果行爲是specfic這些控件:

- 一個非常簡化版本如下:

<telerik:RadToolTipManager ID="RadToolTipManager1" runat="server" 
    Position="BottomLeft" RelativeTo="Element" ShowEvent="OnClick" 
    HideEvent="ManualClose" Animation="Fade" OnAjaxUpdate="OnShowItems" > 
    <TargetControls> 
      <telerik:ToolTipTargetControl TargetControlID="btnShowItems" /> 
    </TargetControls> 
</telerik:RadToolTipManager> 
... 
... 
<asp:LinkButton ID="btnShowItems" runat="server" Visible="false"> 
    <span><%= ItemsPrompt %></span> 
</asp:LinkButton> 
... 
... 
<uc1:X ID="XControl" runat="server"/> 

的用戶控件 「X」 - 一個非常簡化版本如下:

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" 
    LoadingPanelID="LoadingPanel1" RenderMode="Block"> 
    <asp:LinkButton runat="server" ID="CausePostbackButton" 
     Style="display: none" /> 
</telerik:RadAjaxPanel> 

使用案例#1 - 成功

  1. 該頁面加載和內控制 「X」 一個JavaScript計時器激活上LinkBut​​ton的 「CausePostbackButton」[EVAL(__ doPostBack(postbackButtonClientID, ''))回發; ]。 (所以,這模仿了用戶點擊按鈕)。
  2. 的AJAX調用發送至服務器和ñ秒後返回,並在頁面更新結果以特定的方式。
  3. 然後,用戶點擊LinkBut​​ton「btnShowItems」,該按鈕導致回發到服務器,並在幾秒鐘後返回並導致頁面以特定方式更新。

使用案例#2 - 失敗

  1. 該頁面加載和控制 「X」 中的一個JavaScript計時器激活上LinkBut​​ton的 「CausePostbackButton」 回發。 (所以,這模仿了用戶點擊按鈕)。

  2. 之前的服務器有時間作出反應,用戶點擊LinkBut​​ton的「btnShowItems」。

  3. 在火狐/ Firebug中,可以看到,先回後的事件被「中止」。第二個回傳事件完成(您可以看到所報告的時間),但該頁面未在視覺上更新。

  4. 如果「手動」按鈕,然後再次單擊不如預期,那麼工作。

我的想法

  • 我知道,JavaScript是單線程的,因此,如果事件不能立即運行,那麼他們排隊。

  • 我知道,如果一個計時器觸發排隊的事件,然後在第一個事件仍然排隊時觸發相同的事件,那麼其中一個事件(第二個事件)將被丟棄。

  • 這就好像第一個事件正在被丟棄,但第二個事件不能再找到它的「通道」來寫入。

但是,如果我將「手動」鏈接按鈕更改爲圖像按鈕,則行爲不會改變。

任何想法是什麼問題(和理想的解決方案)?

提前

格里夫

+0

爲什麼不直接在telerik論壇上發佈你的問題,或與他們的支持團隊的人聯繫?應該能夠快速接收答案。 –

+0

迪克是正確的這是一個telerik問題不是ajax或javascript問題。如果您使用jQuery來進行ajax調用,您將可以更好地控制代碼。 – DidierDotNet

回答

3

迪克蘭帕德建議非常感謝,我們直接聯繫Telerik的。他們立即想出瞭解決方案:

按設計ASP.NET AJAX框架取消正在進行的ajax請求,如果您嘗試在收到第一個響應之前啓動另一個請求。將RadAjaxPanel的RequestQueueSize設置爲3,例如...

工作正常!