I have the following code:
HTML:
<link rel="stylesheet" href="js/jquery.mobile-1.3.1.min.css"/>
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/jquery.mobile-1.3.1.min.js"></script>
JS:
$(document).on({
ajaxStart: function() {
$.mobile.loading('show');
console.log('getJSON starts...');
},
ajaxStop: function() {
$.mobile.loading('hide');
console.log('getJSON ends...');
}
});
I'm using Jquery Mobile 1.3.1 and testing this code in mozilla firefox and google chrome at the moment. I'm going to use it in a phonegap app later on.
I'm loading a JSON and displaying it on screen in a listview. While it loads, I want the program to show a "loading spinner". Console log shows that ajaxStart is firing but there is no visual spinner anywhere on the screen.
What am I doing wrong? Please Help!
Thanks in advance.
Wrapping it in
setTimeout
works. I just have a simple function to do it:Then just call it when you want to show or hide the spinner:
or
Here's a silly jsfiddle: http://jsfiddle.net/7UpW5/
Inside AJAX call? (but will work anywhere)
And the function itself:
the code for the other answers did not work for me and is not complete (e.g. if you like to pass parameters eventually or just use boolean
true/false
for toggling. The following provides a nice way to do this:use it like this:
What jQuery Mobile documentation is lacking information regarding successful execution of:
and
They will show ONLY during the
pageshow
event. In any other case you need to wrap them into thesetinterval
, like this:In case you don't know anything about
pageshow
and rest of jQuery Mobile page events take a look at this ARTICLE, it is my personal blog. Or find it HERE.First, you will not be able to show/hide
AJAX
loader without set interval. There's is only one situation where this is possible without and that is during thepageshow
event. In any other casesetinterval
is needed to kick start the loader.Here's a working example: http://jsfiddle.net/Gajotres/Zr7Gf/