2013-04-14 27 views
5

可能重复:Same problem (unresolved)加载动画显示不出来,直到Ajax调用完成后

我告诉加载DOM Ajax调用之前和Ajax调用后,我隐藏它。出于某种原因,只有在ajax调用完成后才会显示加载图像。其结果是,加载图像甚至不出现,除非我把delay(#).hide(0)的代码如下:

$("#loading-popup").show(); 
$.ajax({ 
// ajax here 
}); 
$("#loading-popup").hide(0); 

我在其他的Ajax测试要求在我的网站,并出现相同的问题。有没有人得到这个解决?我正在使用Chrome 26.

编辑:我忘了指定我正在使用同步 ajax调用。 (async: false

回答

14

这取决于ajax调用是同步还是异步。

对于异步 Ajax调用,以下工作:

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

对于同步 Ajax调用,它。 Ajax首先被执行,所有其他进程被阻止/排队。

变通的办法是使用的setTimeout这样的:

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

但因为它是同步的,加载GIF将无法运行动画和刚刚成为静态图像(至少对于Chrome浏览器是)

我猜只有两种解决方案:
1)使用异步Ajax调用
2)使用静态加载图像

0

ajax()asyn功能,并在完成ajax调用之前它可能执行的语句。你必须隐藏在successdone函数中。

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

感谢您的回答。你在研究方面指出了我的正确方向。我决定发布一个更全面的答案。 –

0

我知道晚了IM有点党Ø n这个,但是为了将来的参考,如果你想有一个加载动画并使用同步ajax调用,并让它在chrome中有动画,你可以使用这个第三方ajax脚本:http://fgnass.github.io/spin.js/#

Spin.js动态创建旋转活动指示器,可以将其用作与AJAX加载GIF相关的独立于分辨率的替换。

我广泛使用它,它适用于我。

0

这可能是另一种方式。

var $ani = $('#loading-popup').hide(); 
$(document) 
    .ajaxStart(function() { 
    $ani.show(); 
    }) 
    .ajaxStop(function() { 
    $ani.hide(); 
    }); 
0

我不知道如果这个问题已经解决了,但试试这个:

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

让我知道,如果这个工程..

相关问题