2014-09-26 18 views
1

我知道,在一些浏览器(IE浏览器,铬)更改为DOM不会发生,直到函数完成后。我已经阅读了关于如何处理这个问题的各种建议,但我没有任何运气。我试图通过一系列AJAX调用进行循环,并显示正在处理的每一行的进度。该代码是这样的:jQuery改变图像,而功能正在执行,以显示进度

for(i=0; i < rowIds.length; i++){ 

    $(rowImage).attr('src', '/images/spinner.gif'); 

     $.ajax({ 
        type: 'GET', 
        url: ajaxUrl, 
        async: false, 
        processData: true, 
        data: {}, 
        dataType: "json", 
        success: function(data) { 
         $(rowImage).attr('src', '/images/success.gif'); 
        } 
       }); 
} 

我读过有关努力,以确保图像转变发生在继续之前,如AJAX调用开始之前这样几点建议:

var changeImage = function() { 
    $(rowImage).attr('src', '/images/spinner.gif'); 
}; 

$.when(changeImage()).done(function() { 
      //run AJAX call 

但这并没有什么区别。直到功能完成执行后,图像才会更改。

您将会注意到,我将async设置为false,并且出于各种原因正在执行此操作。但即使没有到位,这个问题仍然存在。我也尝试使用setTimeOut(),因为已经建议,并且似乎不工作(并且我知道setTimeOut()是为异步模式,但即使在异步它似乎没有帮助。)

+0

欢迎来到使用锁定浏览器的同步Ajax调用的世界。 – epascarello 2014-09-26 18:38:50

回答

0

Jquery的:

$.ajax({ 
     type: 'GET', 
     url: ajaxUrl, 
     async: false, 
     processData: true, 
     data: {}, 
     dataType: "json", 
     success: function(data) { 
      $(rowImage).attr('src', '/images/success.gif'); 
     } 
}); 

$(document).ajaxStart(function() { 
     $(rowImage).attr('src', '/images/spinner.gif'); 
    }).ajaxStop(function() { 

}); 
+0

感谢您的两个建议。不幸的是,似乎都没有工作。 .ajaxStart只在第一次调用ajax时触发,但不管在结束之前图像没有更改。我发现.ajaxSend在尝试在每个ajax请求的开头执行某些操作时是最好的。但是,.ajaxSend似乎可以与任何其他代码操作一起使用,但在所有调用结束之前它不会更改任何图像。与beforeSend相同的行为。 (在IE和Chrome中都是如此,即使使用我的原始代码,FF也能正常工作) – user3521590 2014-09-26 20:39:43

0

Estimado:

Puedes intentar utilizar LAfunciónbeforeSend德ESTA MANERA:

$.ajax({ 
       type: 'GET', 
       url: ajaxUrl, 
       async: false, 
       processData: true, 
       data: {}, 
       dataType: "json", 
       beforeSend: function(data){ 
        $(rowImage).attr('src', '/images/spinner.gif'); 
       }, 
       success: function(data) { 
        $(rowImage).attr('src', '/images/success.gif'); 
       } 
      }); 

ESPERO TE SIRVA,saludos

+0

欢迎使用StackOverflow!请注意,您只能在这里使用英语进行问题和解答。你的代码看起来不错,顺便说一句。 – VMai 2014-09-26 20:03:50