alert blocks execution even async

SO question 20096590

by Gerald Gillespie

HTML

<button id="js">Click me to begin!</button>
<div>Request 1: <span id="resp1">-</span></div>
<br/>
<div>Request 2: <span id="resp2">-</span></div>
<br/>
<div>
change the asyncFlag to true/false to get a different behaviour
<br/>
<button id="asyncflag">Async Value is <span id="asyncvalue">true</span></button>
</div>

JavaScript

(function($){
		var asyncFlag = true;
		$('#asyncflag').on('click', function(){
    	asyncFlag = !asyncFlag;
      $('#asyncvalue').html( asyncFlag.toString());
    });
    $('#js').click(function() {

        var preDate = new Date();
        $('#resp1, #resp2').html('...');
        $.ajax({
            url : '/echo/html',
            data : { delay : 8 } ,
            async : asyncFlag,
            complete: function(request, textStatus) {
                $('#resp1').html('complete. Started at:'+preDate + '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finished at:'+ (new Date())) ;
                alert('The second request was ' + (asyncFlag?  'completed long before you saw' : 'not even started until you close' )  + ' this alert!'); 
            }
        });
        preDate = new Date();
        $.ajax({
            url : '/echo/html',               
            data : { delay : 3 },
            async : asyncFlag,
            complete: function(request, textStatus) { 
                    $('#resp2').html('complete. Started at:'+preDate + '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finished at:'+ (new Date())) ;
            }
        });
    });
})(jQuery)