If you have lots of ajax calls returning elements on your page then the only way to know when they have all finished is to keep track of them and use their callbacks to work out when its all loaded. The load or ready events on the page are only concerned with resources loaded through the html and not loaded via asynchronous requests. Asynchronous
being the key bit here.
If I were you I would have two global variables: totalNumberOfCalls
& finishedCalls
At the start of my page I would set totalNumberOfCalls to the correct number, then on each callback I would have a small bit of code similar to this:
if (++finishedCalls == totalNumberOfCalls) console.log('Page Loaded');
else console.log( (finishedCalls / totalNumberOfCalls) * 100 + '% loaded');
This way you can easily add a simple counter to work out the progress.
If you are loading images and other external elements then it might be worth doing the counting on the load
events of the returned elements so you get the actual finished loading time and not time when the request has returned but not any associated resources.
If this all seems a little too much, then just make the ajax calls synchronous
instead, that way you page will stall while the calls are going on. This is not good practice though.