gpt4 book ai didi

javascript - ASP.NET AJAX 回发中止

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:21 27 4
gpt4 key购买 nike

我有一个带有两个回发事件的 ASP.NET 网页,第二个正在中止第一个。第二个在完成后不会按预期呈现。

详细说明

我有一个有效包含两个链接按钮的 ASP.NET 网页。它使用 Telerik ASP.NET AJAX 控件,但我不确定该行为是否特定于这些控件:

The Page - 一个极其精简的版本如下:

<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"/>

UserControl“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 调用转到服务器,n 秒后返回并导致页面以特定方式更新。
  3. 然后用户单击 LinkBut​​ton“btnShowItems”,这会导致回发到服务器,n' 秒后返回并导致页面以特定方式更新。

用例 #2 - 失败

  1. 页面加载并且控件“X”中的 JavaScript 计时器激活 LinkBut​​ton“CausePostbackButton”上的回发。 (因此,这模拟了用户点击按钮)。

  2. 在服务器有时间响应之前,用户点击 LinkBut​​ton“btnShowItems”。

  3. 在 FireFox/Firebug 中,您可以看到第一个回发事件是“Aborted”。第二个回发事件完成(您可以看到所报告的时间)但页面没有视觉更新。

  4. 如果再次点击“手动”按钮,则一切正常。

我的想法

  • 我知道 JavaScript 是单线程的,所以如果事件不能立即运行,它们就会排队。

  • 我知道如果计时器触发一个排队的事件,然后在第一个事件仍在排队时触发同一个事件,那么其中一个事件(第二个?)将被丢弃。

  • 这就好像第一个事件被丢弃了,但随后第二个事件就再也找不到要写入的“ channel ”了。

但是,如果我将“手动”链接按钮更改为图像按钮,则行为不会改变。

知道问题是什么(最好是解决方案)吗?

提前致谢

格里夫

最佳答案

按照迪克·兰帕德的建议,我们直接联系了 Telerik。他们立即想出了解决方案:

根据设计,如果您在收到第一个请求的响应之前尝试启动另一个请求,ASP.NET AJAX Framework 会取消正在进行的 ajax 请求。例如,将 RadAjaxPanel 的 RequestQueueSize 设置为 3...

成功了!

关于javascript - ASP.NET AJAX 回发中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849118/

27 4 0