[英]JQuery show() is delayed in Internet Explorer/Chrome
我有一個“處理中...” div疊加層,在進行ajax調用之前顯示為$('')。show(),並在完成時隱藏。 我遇到的問題是,如果我想顯示div,然后在再次隱藏div之前進行幾次ajax調用,似乎在Internet Explorer(7)和Chrome(2.0.172.39)中將事件排隊,但是我在Firefox(3.0.13)中獲得預期的結果。 當只有一個ajax調用時,它可以正常工作。 代碼是這樣的:
<div id="foo">processing...</div>
<button onclick="performSingle()" /> <-- This behaves like it's supposed to
<button onclick="performMultiple()" /> <-- This queues the events in IE/Chrome.
<script>
$(document).ready(function(){
$('#foo').hide();
});
function singleAjaxCall() {
$.ajax({
url: ...,
type: "GET",
async: false, //There is a reason for this.
success: function() {}
});
}
function multipleAjaxCalls() {
singleAjaxCall();
singleAjaxCall();
singleAjaxCall();
singleAjaxCall();
singleAjaxCall();
singleAjaxCall();
singleAjaxCall();
singleAjaxCall();
}
function performSingle(){
$('#foo').show();
singleAjaxCall();
$('#foo').hide();
}
function performMultiple(){
$('#foo').show();
multipleAjaxCalls();
$('#foo').hide();
}
</script>
也許您應該通過附加單個ajax調用的complete事件來發出信號處理信號? 如果您菊花鏈式連接了您的ajax調用,這將迫使它進行序列化並按照我認為您希望的方式運行。 確保完全隱藏了final方法,因為ajax調用不會阻塞。
表演結束后,您可以附加一個函數來調用。
$('#foo').show( 0, function(){multipleAjaxCalls();} )
是的,嘗試嵌套您的Ajax調用。 像這樣-
function singleAjaxCall() {
$.ajax({
url: ...,
type: "GET",
async: false, //There is a reason for this.
success: myCallback1
});
}
function myCallback1($data)
{
if(some condition){
performSingle();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.