【问题标题】:ASP.NET AJAX using UpdatePanels使用更新面板的 ASP.NET AJAX
【发布时间】:2011-05-23 23:29:22
【问题描述】:

从概念上讲,我对 AJAX 的理解是异步发送到服务器的请求,也就是并行。当我在一个页面上使用多个 UpdatePanels 并触发多个异步回发(比如使用按钮)时,我注意到第二个请求直到第一个请求完成后才开始。

但是,当我使用 JQuery ajax 并使用 PageMethods/WebMethods 时,我的请求是并行处理的。

为什么 ASP.NET AJAX 的行为方式存在差异?

此外,当我反复单击 UpdatePanel 中的按钮时,它中止以前的请求。我原以为他们会排队。

有什么帮助吗?

【问题讨论】:

  • 来自 UpdatePanel 的请求仍然贯穿整个页面生命周期。因此,每个请求都有相关的状态数据。这就是为什么两个请求不能为同一个会话同时运行的原因。 Jquery ajax 请求命中无状态静态方法的地方。

标签: asp.net ajax asp.net-ajax jquery


【解决方案1】:

因为它必须表现得那样。

UpdatePanel 的异步回发仍然只是:回发。如果允许并行发生多个回发,它们的新 ViewState 通常会彼此不同步。然后,下一次回发将引发 ViewState 验证错误和/或在第三次回发完成后,其中一个回发对页面状态的修改将丢失。

另一方面,页面方法和 Web 服务调用不受 WebForms ViewState 或页面生命周期的阻碍。因此,在浏览器的同时请求限制允许的情况下,其中许多可能并行发生(通常为 4-8,但在某些浏览器如 IE6 中只有 2 个)。

【讨论】:

  • +1 这正是我在评论中所说的。 ASP.NET AJAX 模型是一个根本性的破坏设计。
【解决方案2】:

This blog post 似乎解决了您的问题并提供了解决方案。他使用一些 javascript 对多个请求进行排队,并将它们批量发送到服务器(我认为)。

【讨论】:

  • 感谢您的链接。它肯定解决了我关于请求中止的问题。对我关于 ASP.NET AJAX 行为差异的问题有何想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多