function tryToDownload(url)
{
oIFrm = document.getElementById('myIFrm');
oIFrm.src = url;
// alert(url);
// url=escape(url);
setTimeout(deletefile(url), 25000);
}
以下是deletfile函数
function deletefile(url){
$.ajax({
type:'post',
url: "<%= addToDoDeleteDownloadFile %>",
data:{filename:url},
type : "GET",
timeout : 20000,
dataType : "text",
success : function(data) {
alert("success");
}
});
}
上面是我的jQuery并且我在25秒后调用了一个函数,但是有些如何不延迟deletefile(url)函数并在之后执行。那么应该是什么问题?
答案 0 :(得分:19)
在此行中,您正在调用您的函数并将其结果传递给setTimeout()
。
setTimeout(deletefile(url), 25000);
如果要延迟执行,请添加包装函数:
setTimeout( function(){ deletefile(url); }, 25000);
修改强>
@Petah提出的替代方案:
setTimeout(deletefile, 25000, url);
延迟后传递给setTimeout()
的所有参数将在执行时传递给函数。所以在这种情况下,你将引用传递给函数,延迟,然后按顺序将参数传递给函数!
请注意,根据MDN这种传递参数的方式在IE9之前不会在IE中运行。
答案 1 :(得分:3)
那是因为你正在调用该函数,并使用setTimeout调用中的返回值。将它包装在匿名函数中,以便由setTimeout调用:
function tryToDownload(url) {
oIFrm = document.getElementById('myIFrm');
oIFrm.src = url;
// alert(url);
// url=escape(url);
setTimeout(function() { deletefile(url); }, 25000);
}