Ajax完成加载后jQuery执行加载消息!

时间:2011-03-29 15:21:44

标签: jquery ajax loader

这似乎让我感到沮丧。

我在进行ajax调用之前尝试显示ajax loader gif。 Firefox是唯一似乎按顺序执行此操作的浏览器。所有其他浏览器首先完成ajax调用,然后显示加载器。

这个代码:

$(#element).click(function(evt){

  tmp_eleX = $this.offset().left;  // get current left position of element 
  tmp_eleY = $this.offset().top;   // get current top position of element  

  $('#ajax_loader').css({top: tmp_eleY-208}); // show ajax loader which was placed outside viewable area (-9999)

  $.ajax({
    url: "some_file.cfm",
    cache: false,
    dataType: "html",
    async: false, // wait for loading to finish before continuing code
    timeout: 30000,
    error: function(){
      return true;
    },
    success: function(data) {
      $('#someelementtoinject_ajaxdata').html(data);
    }
  });                        

  $('#ajax_loader').css({top: -9999}); // move ajax loader off screen - for testing i comment out this line to see when the loader shows!

});

这让我很沮丧。我尝试在

中包装Ajax调用
window.setTimeout(function(){
}, 0);

Ajax Loader在所有浏览器中的ajax调用之前显示,问题是动画GIF没有动画直到ajax完成加载东西!

我也尝试过:

  $('#ajax_loader')
    .ajaxStart( function() {
      $(this).css({
        top: -208
      })
    })
    .ajaxStop(function(){
      $(this).css({
        top: -1000                          
      })
    });

相同的结果Ajax在.ajaxStart触发之前完成了,哎呀:/!在这里,只有Firefox正常工作并在ajax调用之前显示动画。

它似乎在所有浏览器中工作的唯一方法是设置ajax调用'async:true'。对于ajax在继续之前完全加载并且可能在页面上触发另一个ajax调用是至关重要的。

关于如何在ajax完成之前触发加载器的任何想法?在代码继续之前,还需要完成ajax。

我没想到这个@ ^& ^#@我的大脑正在流血:/

2 个答案:

答案 0 :(得分:0)

async: false, // wait for loading to finish before continuing code

这似乎是你的问题 - 你不是异步进行AJAX调用,因此(我猜),控件没有返回浏览器,所以它无法响应'show the gif '直到AJX呼叫返回后的动作。

答案 1 :(得分:0)

感谢您快速回答......

我通过添加一个全局变量解决了这个问题,这个变量也使得async:true成为一个选项。我将全局标志设置为ajax调用的成功函数中的最后一个操作。