我正在使用ASP.NET AJAX,并想了解这两个代码片段之间的区别:
function pageLoad(sender, eventArgs) { }
并且window.onload = function() { }
- 它们的功能相同吗?
- 或者其中一个会在另一个之前被调用?
- 或者其中一个会自动被调用而另一个不会?
我正在使用ASP.NET AJAX,并想了解这两个代码片段之间的区别:
function pageLoad(sender, eventArgs) { }
并且window.onload = function() { }
Sys.Application
的“客户端运行时对象”。它处理页面在客户端生命周期内引发的 init
、load
和 unload
事件,具体如下:
Sys.Application.initialize()
开始生命周期的 init
部分。这个函数会初始化所有客户端 AJAX 控件,之后就可以通过编程方式与它们交互了。Sys.Application
开始生命周期的 load
部分,调用所有已订阅此事件的处理程序。pageLoad
,则调用该函数。pageLoad
只是一个方便的快捷方式,可替代 Sys.Application.add_load()
。
在与window.onload
的关系方面,事情开始变得有趣。基本上,微软需要window.onload
仅在init
阶段完成后才触发。但是,您无法控制浏览器何时触发onload
,因为它与“内容加载”相关。这就是所谓的"window.onload
问题":
所以,他们只是发明了自己的“特殊”功能,在事件生命周期中恰当的时间触发并称之为“pageLoad”。而启动此自定义事件生命周期的技巧是将调用当所有页面内容(包括图像和其他二进制内容)都已加载时,
onload
事件才会触发。如果您的页面包含大量图像,则页面变为活动状态之前可能会出现明显的延迟。
Sys.Application.initialize()
放在关闭的</form>
标签之前。这是由服务器端运行时完成的。敏锐的读者会注意到,这个技巧允许MS解决window.onload
问题,因为你放入pageLoad
的任何代码都将独立于二进制内容触发(唯一一个IE的罕见异常)。
> 它们的作用相同吗?
从概念上讲,是的,但实际上不是完全相同,因为存在window.onload
问题。唯一的规则是只在pageLoad
中放置与您的AJAX控件交互的代码,因为window.onload
遵循其自己的事件轨迹。
> 或者一个先调用,另一个后调用?
它们是完全独立的,百分之百无关。
> 或者其中一个被自动调用而另一个没有?
如果你定义了它们,它们都会被调用。
</form>
结束标签之前放置调用)实际上是天才。它允许将 ASP 页面生命周期与可怕的、依赖于浏览器的事件分离开来。这也是为什么现在很容易构建完整的服务器端警报 API,该 API 使用纯 JavaScript 来显示/隐藏或动画等特定元素的原因。他们做得非常好,由此我们可以从服务器端事件执行 任何 JS 代码。♥ x100 - Skipper