I use a div on top of the map with a spinning "loading animation". When I start loading new data, I .show() the layer. Once it's loaded, I .hide() the layer, all with JQuery.
For example:
$('#maploader').show();
$.get("/loadStuff.php", {parameter: value}, function(data){
// do stuff
$('#maploader').hide();
}, "json");