2011-04-26 68 views
2

我具有以下js代碼:如何設置兩個js函數之間的延遲?

clientData.reloadTable("CreateCSV", "/create/file"); 
$("#downloadFrame").attr("src","/download/download"); 

在上面的代碼中。第一條語句是在磁盤上創建一個csv文件。而第二個聲明是下載它(使用iframe在使用AJAX請求時因錯誤而下載文件)。它是下載文件,但與以前的內容。這意味着它會提示我在完成更新該文件之前下載文件。

我怎樣才能強制我的2 聲明在第一個聲明完成其工作之前不執行?

謝謝

+0

理想的情況是,處理一個URL將生成報告2)將其寫入HTTP響應輸出流。這樣,回覆就會等到報告準備就緒。另一種方法是檢查它是否定期完成,只有在準備就緒後才能下載。 – helios 2011-04-26 07:26:09

+0

'reloadTable'的代碼是什麼?據我所見,它不是任何標準的jQuery插件。 – 2011-04-26 07:28:00

+0

clientData.reloadTable在內部調用一個在磁盤上創建CSV文件的php函數。 – Awan 2011-04-26 07:33:00

回答

7

在Javascript中這樣做的最好方法是使用回調函數。

如果有可能改變reloadTable功能,使得>

var callback = function() { $("#downloadFrame").attr("src", "/download/download") } 

clientData.reloadTable("CreateCSV", "create/file", callback); 

然後reloadTable函數中,調用回調函數,一旦一切都做。

這是Javascript的真正之美。


否則,你也可以使用setTimeout(),如果你有一個想法reloadTable需要多少時間。

例如如果是需要1秒。要完成,您可以>

clientData.reloadTable("CreateCSV", "create/file"); 
var func = function() { $("#downloadFrame").attr("src","/download/download");} 
setTimeout(func, 1000); 
5

它聽起來不太健壯。但不管怎麼說:

function start() { 
    doFirstThing(); 
    setTimeout('doSecondThing();', 1000); // execute the secondthing in 1000 ms 
} 

function doSecondThing() { 
... 
} 
2
clientData.reloadTable("CreateCSV", "/create/file"); 

,如果它是一個Ajax調用。從它的回調中調用你的下載功能。

+0

是的,這是一個AJAX調用。 – Awan 2011-04-26 07:31:14