首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET AJAX pageLoad()和JavaScript window.onload有什么不同?

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

Stack Overflow用户
提问于 2009-03-02 14:01:31
回答 1查看 15K关注 0票数 17

我正在使用ASP.NET AJAX,我想了解这两个代码片段之间的区别:

代码语言:javascript
复制
function pageLoad(sender, eventArgs) { }

代码语言:javascript
复制
window.onload = function() { }

  • 它们的行为是否相同?
  • ,还是一个在另一个之前被调用?
  • ,还是一个自动被调用,另一个不被调用?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-02 17:10:03

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

  1. Sys.Application.initialize()开始了生命周期的init部分。这个函数是所有客户端AJAX控件的函数,之后它们就可以与programatically
  2. Sys.Application交互了。之后,它们开始生命周期的load部分,调用所有订阅了这个函数的处理程序,它调用全局函数pageLoad (如果定义了一个函数)

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

所以最后的答案是:pageLoadSys.Application.add_load()的快捷方式。

然而,关于它与window.onload的关系,事情开始变得有趣起来。本质上,只有在init阶段完成后,MS才需要window.onload来触发。但你无法控制浏览器何时启动onload,因为它与“加载的内容”捆绑在一起。这就是所谓的"the window.onload problem"

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

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

>它们的行为是否相同?

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

>还是先调用一个,再调用另一个?

他们是完全,100%独立的。

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

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

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/602441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档