我有以下js代码:
clientData.reloadTable( "CreateCSV", "/create/file" );
$("#downloadFrame").attr("src","/download/download");
在上面的代码中。第一个语句是在磁盘上创建一个csv文件。第二个语句正在下载它(使用iframe下载文件因为使用AJAX请求时出错)。它是下载文件,但有以前的内容。这意味着它会在完成更新该文件之前提示我下载文件。
如何强制我的2 nd 语句在第一个语句完成其工作之前不执行?
由于
答案 0 :(得分:7)
在Javascript中执行此类操作的最佳方法是使用回调函数。
如果可以更改reloadTable函数,使其>>
var callback = function () { $("#downloadFrame").attr("src", "/download/download") }
clientData.reloadTable("CreateCSV", "create/file", callback);
然后在reloadTable函数内部,一切都完成后调用回调函数。
这是Javascript的真正之美。
否则,如果你知道reloadTable需要多长时间,你也可以使用setTimeout()。
e.g。如果需要1秒钟。要完成,您可以>
clientData.reloadTable( "CreateCSV", "create/file" );
var func = function () { $("#downloadFrame").attr("src","/download/download");}
setTimeout(func, 1000);
答案 1 :(得分:5)
听起来不太健壮。但无论如何:
function start() {
doFirstThing();
setTimeout('doSecondThing();', 1000); // execute the secondthing in 1000 ms
}
function doSecondThing() {
...
}
答案 2 :(得分:2)
clientData.reloadTable( "CreateCSV", "/create/file" );
如果是ajax电话。从它的回调中调用你的下载功能。