2013-07-03 79 views
2

我正在使用Javascript和jQuery來呈現頁面。如何確定所有腳本何時完成運行?

頁面必須快速加載。因此,我想先呈現一些基本信息,然後才發送另一個請求以獲取一些其他信息。

我的問題是我應該何時發送第二個請求?我如何知道基本信息何時完成渲染並且沒有腳本仍在運行?

+0

工作,我猜你使用'$。阿賈克斯()'方法。所以看看這些文檔,你會看到當成功完成請求時你可以使用'success'選項來運行代碼。 – Ian

+0

我想有多個請求與他們自己的處理程序,並希望知道什麼時候所有完成... –

+0

做與基本信息相關的腳本做任何異步處理,如ajax?如果沒有,你可以確信它們都按照它們包含的順序運行,並且你可以把代碼加載到其他腳本的最後一個腳本後面。將腳本放在主體的末尾,您可以確信所有基本內容在運行之前都已加載。 – nnnnnn

回答

-3

設置一個信號量,您可以使用定時器進行檢查。假設你有5個腳本在運行。設置一個全局變量finishedRunning=0;。在每個腳本中,就在返回之前(即完成)做finishedRunning+=1;。當finishedRunning達到5時,你很好走。

+0

帶*計時器*您的意思是*計數器*?如果他在0時啓動計數器,當啓動腳本計數器+ 1並且在完成時,它會更好-1 –

+0

不是。一個計時器。每秒鐘可以檢查'finishedRunning'變量。 – dda

+1

如果其中一個腳本有錯誤而且'finishedRunning'永遠不會到'5'會怎麼樣? – nnnnnn

3

可能會更好用AMD的方法?除了requirejs之外,我還喜歡類似的lib

-2
var asyncOperations = { 
    counter: -1, // -1 because the value should not already met the ending condition at initialization 
    finishedHandler: null; 
    startOp: function() { 
     if(counter == -1) counter = 0; 
     counter++; 
    }, 
    endOp: function() { 
     counter++; 
     if(counter == 0 && finishedHandler) { 
      finishedHandler.inform(); 
    } 
} 

function handler(data) { 
    doSomethingWithData(); 
    asyncOperations.endOp(); 
} 

function allOperationsFinished() { 
    alert("success"); 
} 

function main() { 
    asyncOperations.finishedHandler = allOperationsFinished; 
    $.ajax(...whatever..., handler); 
} 
相關問題