2011-04-26 26 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