Почему 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);

}