【问题标题】:Page Loading Image after multiple ajax call多次ajax调用后页面加载图像
【发布时间】:2013-02-04 05:24:16
【问题描述】:

我已经给出了一个加载图像绑定到这样的 ajax 启动/停止函数..

$('#LoadingImage').bind('ajaxStart', function(){
    $(this).show();
}).bind('ajaxStop', function(){ 
    $(this).hide();
});

现在我在 document.ready() 下的页面上有许多 ajax 调用。所以所有 ajax 调用同时开始..但是 ajax 停止根据 ajax 中的结果而有所不同..所以会发生什么

加载图像出现,当一个 ajax 调用完成时,图像被隐藏并显示我的主屏幕。有没有办法加载图像直到最后的 ajax 调用完成???

<script type="text/javascript">

$(document).ready(function () {

$('#LoadingImage').on('ajaxStart', function(){
        $(this).show();
}).on('ajaxStop', function(){   
        $(this).hide();

});

$.ajax({
                url: http:www.google.com(for example i gave this url),
                data:JSON.stringify({login:{"loginid":userid,"reqType":"R"}}),
                type: 'POST',
                dataType:"json",
                contentType: 'application/json',
                success: function(data) {  
$.each(data.GetRejectedRequestsMethodResult,function(key,val){
                              //some code

error: function(data, status, jqXHR) {                       
                    alert('There was an error.');
                }

        }); // end $.ajax 


$.ajax({
                url: http:www.google.com(for example i gave this url),
                data:JSON.stringify({login:{"loginid":userid,"reqType":"R"}}),
                type: 'POST',
                dataType:"json",
                contentType: 'application/json',
                success: function(data) {  
$.each(data.GetRejectedRequestsMethodResult,function(key,val){
                              //some code

error: function(data, status, jqXHR) {                       
                    alert('There was an error.');
                }

            }); // end $.ajax 
$.ajax({
                url: http:www.google.com(for example i gave this url),
                data:JSON.stringify({login:{"loginid":userid,"reqType":"R"}}),
                type: 'POST',
                dataType:"json",
                contentType: 'application/json',
                success: function(data) {  
$.each(data.GetRejectedRequestsMethodResult,function(key,val){
                              //some code

error: function(data, status, jqXHR) {                       
                    alert('There was an error.');
                }

            }); // end $.ajax 
$.ajax({
                url: http:www.google.com(for example i gave this url),
                data:JSON.stringify({login:{"loginid":userid,"reqType":"R"}}),
                type: 'POST',
                dataType:"json",
                contentType: 'application/json',
                success: function(data) {  
$.each(data.GetRejectedRequestsMethodResult,function(key,val){
                              //some code

error: function(data, status, jqXHR) {                       
                    alert('There was an error.');
                }

            }); // end $.ajax 

$.ajax({
                url: http:www.google.com(for example i gave this url),
                data:JSON.stringify({login:{"loginid":userid,"reqType":"R"}}),
                type: 'POST',
                dataType:"json",
                contentType: 'application/json',
                success: function(data) {  
$.each(data.GetRejectedRequestsMethodResult,function(key,val){
                              //some code

error: function(data, status, jqXHR) {                       
                    alert('There was an error.');
                }

            }); // end $.ajax 

像上面一样,我有很多 ajax 调用...问题是第一个 ajax 完成后图像隐藏了..

【问题讨论】:

  • 首先,.bind 被贬低,使用.on 函数
  • 你能创建一个fiddle 吗?这将非常有帮助。

标签: javascript ajax jquery loading


【解决方案1】:

您可以设置一个变量,该变量在 Ajax 启动时递增,在 Ajax 完成时递减。 在 ajaxStop 函数中检查这个变量是否为 0。如果为零则只隐藏图像。

这样做,

$(document).ready(function () {
  var count=0;
  $('#LoadingImage').on('ajaxStart', function(){
      count++;
     if(count===1){
         $(this).show();
     }
  }).on('ajaxStop', function(){
     //count is decrementing and on same time checking whether it becomes zero
     if(!--count){
       $(this).hide();
     }
  });

  //suppose 10 simultanious ajax calls
  for(var j=0;j<10;j++){
     $.ajax({
     //configure whatever you want
     });   
  }
});

这应该可行(理论上)。

【讨论】:

  • 在我的 ajax 内部递增的变量无法在外部访问...如果我发出警报以了解它的值,它会发出错误的警报值..
  • 在 ajax 函数之外声明变量。如果您再次遇到问题,请分享修改后的代码,以便调试。
  • @PraveenGodfrey 请使用 jsfiddle.net 或 jsbin.com 复制您面临的问题。这会给你更好的答案
  • @Dinoop paloli:感谢您付出了 4 天的努力。我的页面中有 8 个 ajax 调用。所有 ajax 调用都在 document.ready() 函数中给出。所以我所有的 ajax 调用都是在 document.ready() 上同时开始的,但结束时间会有所不同..一个可能会获取较少的记录并在 2 毫秒内结束,有些可能需要获取很多记录并且可能需要 12 毫秒......!!这是我的情况..你可以根据这种情况编辑你给出的上述代码吗??
  • @PraveenGodfrey 我想你还没有测试我的代码。让我解释。假设一次启动 8 个调用,然后计数变量增加到 8,如 1,2,---8。当第一次 Ajax 调用开始时,图像变为可见 (count==1) 。当每个 Ajax 调用结束时,它将减少到 7,6,5--- 到 0 。当 0 来时 表示所有调用都成功(!--count)。所以图像会隐藏起来。
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 2011-09-02
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多