Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
416 views
in Technique[技术] by (71.8m points)

.net - What's the different between ASP.NET AJAX pageLoad() and JavaScript window.onload?

I'm working with ASP.NET AJAX and want to understand the difference between these two snippets:

function pageLoad(sender, eventArgs) { }

and

window.onload = function() { }
  • Do they act the same?
  • Or is one called before the other?
  • Or will one be called automatically and the another not?
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

A couple things to note first. MS invented a sort of "clientside runtime object" called Sys.Application. It handles raising init, load, and unload events throughout the [clientside] lifespan of the page, as follows:

  1. Sys.Application.initialize() begins the init part of the life cycle. This initialize()s all clientside AJAX controls, after which they're ready to be interacted with programatically
  2. Sys.Application begins the load part of the life cycle, calling all handlers that have subscribed to this event
  3. Finally, it calls the global function pageLoad (if one is defined)

Step 2) and 3) are repeated for every partial (ie AJAX + UpdatePanel) postback.

So finally the answer: pageLoad is just a handy shortcut to Sys.Application.add_load().

With regards to its relationship to window.onload however, things start to get interesting. Essentially, MS needed window.onload to fire only after the init phase was complete. But you can't control when the browser will fire onload, as it's tied to "content loaded". This is known as "the window.onload problem":

onload event fires after all page content has loaded (including images and other binary content). If your page includes lots of images then you may see a noticeable lag before the page becomes active.

So, they just invented their own "special" function to fire at just the right time in their event life cycle and called it "pageLoad". And the trick that they used to kickoff this custom event life cycle was to place the call to Sys.Application.initialize() just before the closing </form> tag. The serverside runtime does this. Astute readers will note that this trick allowed MS to solve the window.onload problem, since any code you put into pageLoad will fire independent of binary content (w/ one rare catch for IE).

> Do they act the same?

Conceptually yes, in practice not at all due to said window.onload problem. The only rule is that you should put code that interacts with your AJAX controls in pageLoad only, since window.onload follows its own event trajectory.

> Or is one called before the other?

They are completely, 100% independent.

> Or will one be called automatically and the another not?

They will both be called if you have them defined.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...