Loading animation doesn't show up until after ajax call completes

前端 未结 5 1922
轮回少年
轮回少年 2020-12-03 06:20

Possible duplicate: Same problem (unresolved)

I show loading DOM before the Ajax call and after the Ajax call, I hide it. For some reason, the loading image appears

相关标签:
5条回答
  • 2020-12-03 06:48

    i'm not sure if this problem is already resolved, but try this:

    $("#loading-popup").show();
    $.ajax({
    // ajax here
    success: function(data) {
      $("#loading-popup").hide();
    }
    });
    

    let me know if this works..

    0 讨论(0)
  • 2020-12-03 06:53

    I know Im a bit late to the party on this, but for future reference if you want to have a loading animation AND use a synchronous ajax call AND have it animate in chrome, you can use this third party ajax script: http://fgnass.github.io/spin.js/#!

    Spin.js dynamically creates spinning activity indicators that can be used as resolution-independent replacement for AJAX loading GIFs.

    I use it extensively and it works perfectly for me.

    0 讨论(0)
  • 2020-12-03 06:54

    This could be another way.

    var $ani = $('#loading-popup').hide();
    $(document)
      .ajaxStart(function () {
        $ani.show();
      })
      .ajaxStop(function () {
        $ani.hide();
      });
    
    0 讨论(0)
  • 2020-12-03 06:58

    It depends on whether the ajax call is synchronous or asynchronous.

    For asynchronous ajax call, the following works:

    $("#loading-popup").show();
    $.ajax({
    type: 'POST',
    // other parameters
    success: function(yourdata)
    {
        $("#loading-popup").hide();
    }
    

    For synchronous ajax call, it does NOT. Ajax gets executed first and all other processes are blocked/queued.

    A way around it is to use setTimeOut like this:

    setTimeout(function () {
    $("#loading-popup").show();
    $.ajax({
    type: 'POST',
    async: false,
    // other parameters
    //
    // other codes
    });
    $("#loading-popup").hide();
    }, 10);
    

    But because it is synchronous, the loading GIF will NOT animate and just become a static image (At least for Chrome that is)

    I guess there are only two solutions:
    1) use asynchronous ajax call
    2) use static loading image

    0 讨论(0)
  • 2020-12-03 07:05

    The ajax() is async function and the statements under it might execute before the ajax call is completed. You have to hide in success or done function.

    $("#loading-popup").show();
    $.ajax({
    // ajax here
    }).success(data){
       $("#loading-popup").hide(0);
    })
    
    0 讨论(0)
提交回复
热议问题