ASP.NET AJAX pageLoad()和JavaScript window.onload有什么不同?

时间:2009-03-02 14:01:31

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

我正在使用ASP.NET AJAX,并希望了解这两个片段之间的区别:

function pageLoad(sender, eventArgs) { }

window.onload = function() { }
  • 他们的行为是否相同?
  • 或者在另一个之前打电话?
  • 或者会自动调用一个而不是另一个吗?

1 个答案:

答案 0 :(得分:41)

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

  1. Sys.Application.initialize()开始生命周期的init部分。这是initialize()所有客户端的AJAX控件,之后他们就可以以编程方式进行交互了
  2. Sys.Application开始生命周期的load部分,调用已订阅此活动的所有处理程序
  3. 最后,它调用全局函数pageLoad(如果已定义)
  4. 对于每个部分(即AJAX + UpdatePanel)回发,重复步骤2)和3)。

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

    关于它与window.onload的关系,事情开始变得有趣。从本质上讲,MS需要window.onload才能在<{em> init阶段完成后仅启动。但您无法控制浏览器何时触发onload,因为它与“内容已加载”相关联。这称为"the window.onload problem"

      

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

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

    <强>&GT;他们的行为是否相同?

    概念上是的,实际上根本没有问题window.onload。唯一的规则是,您应该只在pageLoad中放置与您的AJAX控件交互的代码,因为window.onload遵循其自己的事件轨迹。

    <强>&GT;或者是在另一个之前呼叫?

    他们完全是100%独立的。

    <强>&GT;或者是自动调用而另一个不是?

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