Почему settimeout не задерживает выполнение функции?
function tryToDownload(url)
{
oIFrm = document.getElementById('myIFrm');
oIFrm.src = url;
// alert(url);
// url=escape(url);
setTimeout(deletefile(url), 25000);
}
следующая - функция удаления файла
function deletefile(url){
$.ajax({
type:'post',
url: "<%= addToDoDeleteDownloadFile %>",
data:{filename:url},
type : "GET",
timeout : 20000,
dataType : "text",
success : function(data) {
alert("success");
}
});
}
выше - это мой jQuery и я m, вызывающий одну функцию в конце через 25 секунд, но некоторые из которых не задерживают функцию deletefile (url) и выполняются сразу после. Так что должно быть проблемой?
Ответы
Ответ 1
В этой строке вы вызываете свою функцию и передаете ее результат setTimeout()
.
setTimeout(deletefile(url), 25000);
Если вы хотите отложить выполнение, добавьте функцию-обертку:
setTimeout( function(){ deletefile(url); }, 25000);
ИЗМЕНИТЬ
Альтернатива, предложенная @Petah:
setTimeout(deletefile, 25000, url);
Все параметры, переданные в setTimeout()
после задержки, будут переданы функции при выполнении. Поэтому в этом случае вы передаете ссылку на функцию, задержку и затем параметр на функцию в этом порядке!
Обратите внимание, что согласно MDN этот способ передачи параметров не работает в IE до IE9.
Ответ 2
Это потому, что вы вызываете функцию и используете возвращаемое значение в вызове setTimeout. Оберните его анонимной функцией, чтобы он вызывал setTimeout:
function tryToDownload(url) {
oIFrm = document.getElementById('myIFrm');
oIFrm.src = url;
// alert(url);
// url=escape(url);
setTimeout(function() { deletefile(url); }, 25000);
}