【问题标题】:What's the different between ASP.NET AJAX pageLoad() and JavaScript window.onload?ASP.NET AJAX pageLoad() 和 JavaScript window.onload 有什么区别?
【发布时间】:2010-10-10 18:54:17
【问题描述】:

我正在使用 ASP.NET AJAX,想了解这两个 sn-ps 之间的区别:

function pageLoad(sender, eventArgs) { }

window.onload = function() { }
  • 它们的行为是否相同?
  • 还是先调用一个?
  • 或者一个会被自动调用而另一个不会?

【问题讨论】:

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


    【解决方案1】:

    首先要注意几点。 MS 发明了一种名为Sys.Application 的“客户端运行时对象”。它在整个页面的 [clientside] 生命周期内处理引发 initloadunload 事件,如下所示:

    1. Sys.Application.initialize() 开始生命周期的 init 部分。这initialize()s 所有客户端 AJAX 控件,之后它们就可以以编程方式进行交互了
    2. Sys.Application 开始生命周期的 load 部分,调用所有订阅此事件的处理程序
    3. 最后调用全局函数pageLoad(如果定义了)

    对每个部分(即 AJAX + UpdatePanel)回发重复步骤 2) 和 3)。

    所以最终答案pageLoad 只是到Sys.Application.add_load() 的方便快捷方式。

    然而,关于它与window.onload 的关系,事情开始变得有趣起来。本质上,MS 需要window.onload 仅在init 阶段完成之后触发。但是您无法控制浏览器何时触发onload,因为它与“已加载内容” 相关联。这被称为"the window.onload problem"

    onload 事件在所有页面后触发 内容已加载(包括图像 和其他二进制内容)。如果你的 页面包含很多图像然后你 之前可能会看到明显的滞后 页面变为活动状态。

    因此,他们只是发明了自己的“特殊”功能,以便在事件生命周期的正确时间触发,并将其命名为 "pageLoad"。他们用来启动这个自定义事件生命周期的技巧是place the call to Sys.Application.initialize() just before the closing </form> tag。服务器端运行时执行此操作。精明的读者会注意到,这个技巧让 MS 解决了 window.onload 问题,因为您放入 pageLoad 的任何代码都将独立于二进制内容 (w/ one rare catch for IE) 触发。

    >他们的行为是否相同?

    从概念上讲是的,实际上根本不是由于所说的window.onload 问题。唯一的规则是您应该只将与您的 AJAX 控件交互的代码放在 pageLoad 中,因为 window.onload 遵循自己的事件轨迹。

    > 还是先调用一个?

    他们完全、100% 独立。

    > 或者一个会被自动调用而另一个不会?

    如果你定义了它们,它们都会被调用。

    【讨论】:

    • 你的答案是完整的,但是我的 pageLoad 有另一个问题,当我放入我的页面时,我发现它一直被调用并自动调用,注意:我在页面上有 telerik:RadAjaxManager,所以这个是因为发生了错误,还是因为“由计时器调用”而保持这样的调用是正常的?
    • 写得好 +1 - 解决方案是如此可笑的微软
    • @amrelgarhy:查看我的更新答案:步骤 2) 和 3) 在每个部分(即 AJAX + UpdatePanel)回发时被调用。
    • @crescentfresh:+1。你为什么删除你的另一个答案?它或多或少是一样的。 看起来很困惑
    • @annakata 这个解决方案(在</form> 结束标记之前调用)实际上是天才。它允许将 ASP 页面生命周期与可怕的、依赖于浏览器的事件分开。这也是为什么现在如此容易构建的原因,即使用纯 JavaScript 显示/隐藏或动画等特定元素的完整服务器端警报 API。他们已经完成了 fantastic 的工作,因此我们可以从服务器端事件中执行我们想要的 任何 JS 代码。 ♥ x100
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2017-02-06
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多