Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does my spinner GIF stop while jQuery ajax call is running?

I'm just starting to wean myself from ASP.NET UpdatePanels. I'm using jQuery and jTemplates to bind the results of a web service to a grid, and everything works fine.

Here's the thing: I'm trying to show a spinner GIF while the table is being refreshed (à la UpdateProgress in ASP.NET) I've got it all working, except that the spinner is frozen. To see what's going on, I've tried moving the spinner out from the update progress div and out on the page where I can see it the whole time. It spins and spins until the refresh starts, and stays frozen until the refresh is done, and then starts spinning again. Not really what you want from a 'please wait' spinner!

This is in IE7 - haven't had a chance to test in other browsers yet. Any thoughts? Is the ajax call or the client-side databinding so resource-intensive that the browser is unable to tend to its animated GIFs?

Update

Here's the code that refreshes the grid. Not sure if this is synchronous or asynchronous.

updateConcessions = function(e) {     $.ajax({         type: "POST",         url: "Concessions.aspx/GetConcessions",         data: "{'Countries':'ga'}",         contentType: "application/json; charset=utf-8",         dataType: "json",         success: function(msg) {             applyTemplate(msg);         },         error: function(XMLHttpRequest, textStatus, errorThrown) {         }     }); }  applyTemplate = function(msg) {     $('div#TemplateTarget').setTemplate($('div#TemplateSource').html());     $('div#TemplateTarget').processTemplate(msg); } 

Update 2

I just checked the jQuery documentation and the $.ajax() method is asynchronous by default. Just for kicks I added this

$.ajax({     async: true,     ... 

and it didn't make any difference.

like image 894
Herb Caudill Avatar asked Oct 10 '08 14:10

Herb Caudill


People also ask

Does AJAX call timeout?

Session timeout has been a very common feature in Ajax-based web applications. In responsive interface, the programmer needs to delay the ajax request to achieve some task before the response. This can be achieved by using jQuery setTimeout() function.

How do you send AJAX request every 5 seconds?

Use just setTimeout(executeQuery, 5000); instead of setTimeout('executeQuery()', 5000); - it's shorter and faster.


1 Answers

It's not the Ajax call that's freezing the browser. It's the success handler (applyTemplate). Inserting HTML into a document like that can freeze IE, depending on how much HTML there is. It's because the IE UI is single threaded; if you notice, the actual IE menus are frozen too while this is happening.

As a test, try:

applyTemplate = function(msg) {    return; } 
like image 69
Chase Seibert Avatar answered Oct 01 '22 16:10

Chase Seibert