2009-08-12 96 views
2

我有一個「處理...」div覆蓋圖,在製作ajax調用之前用$('')。show()顯示並在完成時隱藏。我遇到的問題是,如果我想要顯示div,然後再次隱藏div之前進行幾次ajax調用,它似乎將事件排入Internet Explorer(7)和Chrome(2.0.172.39),但是我在Firefox中獲得預期的結果(3.0.13)。當有一個單一的Ajax調用它工作正常。代碼是這樣的:在Internet Explorer/Chrome中延遲JQuery show()

<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> 

回答

0

也許你應該通過附加到單個ajax調用的完整事件來處理信號?如果你菊花鏈接你的ajax調用,這將迫使它序列化,並按照我相信你想要的方式行事。確保最終方法完全隱藏對話框,因爲ajax調用不會被阻止。

0

當演出結束時,您可以附加一個功能來呼叫。

$('#foo').show(0, function(){multipleAjaxCalls();}) 

http://docs.jquery.com/Effects/show

+0

如果您已經完成了傳遞'0'的操作,那麼'function'會被忽略。 – 2009-09-09 15:51:40

+0

現在是。謝謝 – 2009-09-10 08:02:17

0

呀,試試你的築巢Ajax調用。像這樣的東西 -

function singleAjaxCall() { 
    $.ajax({ 
     url: ..., 
     type: "GET", 
     async: false, //There is a reason for this. 
     success: myCallback1 
    }); 
} 


function myCallback1($data) 
{ 
    if(some condition){ 
    performSingle(); 
    } 
} 
0

沒辦法,如果異步設置爲false成功,原因是很好地解釋herehere

當您將async設置爲false時,無論您之前在做什麼,瀏覽器都會凍結。 你應該異步處理你的ajax調用,從而調整你的代碼(也許你也可以看看this thread)。