2012-12-22 10 views
10
function tryToDownload(url) 
{ 

     oIFrm = document.getElementById('myIFrm'); 
     oIFrm.src = url; 
     // alert(url); 
     // url=escape(url); 

     setTimeout(deletefile(url), 25000); 
} 

finden deletfile Funktionwarum settimeout die Ausführung der Funktion nicht verzögert?

function deletefile(url){ 

$.ajax({ 
    type:'post', 
    url: "<%= addToDoDeleteDownloadFile %>", 
    data:{filename:url}, 
    type : "GET", 
    timeout : 20000, 
    dataType : "text", 
    success : function(data) { 
     alert("success"); 

    } 
    }); 
} 

über meine jQuery ist und im eine Funktion am Ende nach 25 Sekunden Aufruf, aber einige, wie es nicht die deleteFile (url) Funktion zu verzögern und führt nur after.So Was sollte das Problem sein?

+0

möglich Duplikat [Javascript SetTimeout] (http://stackoverflow.com/questions/4128938/javascript-settimeout) – Fraser

+1

@Fraser: Das ist nicht wirklich ein Duplikat IMHO. – Matt

Antwort

19

In dieser Zeile rufen Sie Ihre Funktion auf und übergeben ihr Ergebnis an setTimeout().

setTimeout(deletefile(url), 25000); 

Wenn Sie die Ausführung verzögert werden soll, fügen Sie eine Wrapper-Funktion:

setTimeout(function(){ deletefile(url); }, 25000); 

EDIT

Eine Alternative von @Petah vorgeschlagen:

setTimeout(deletefile, 25000, url); 

Alle Parameter nach der Verzögerung an setTimeout() weitergegeben wird, wird übergeben an die Funktion bei der Ausführung. In diesem Fall übergeben Sie die Referenz an die Funktion, die Verzögerung und dann den Parameter an die Funktion in dieser Reihenfolge!

Beachten Sie, dass nach MDN diese Art der Parameterübergabe in IE vor IE9 nicht funktioniert.

+0

@Bhavik Kama: Wenn du 'foo (deletefile (url))' hättest, würde das 'deletefile' sofort aufrufen und den Rückgabewert in' foo' übergeben, richtig? So ist es bei 'setTimeout' genau so, wie Sirko sagte. –

+2

Oder .... 'setTimeout (deletefile, 25000, url)' – Petah

+0

@Petah, die Übergabe zusätzlicher Parameter an die Funktion funktioniert nicht im Internet Explorer –

3

Das liegt daran, dass Sie die Funktion aufrufen und den Rückgabewert im setTimeout-Aufruf verwenden. Wickeln Sie es in einer anonymen Funktion, so dass es durch setTimeout genannt:

function tryToDownload(url) { 

    oIFrm = document.getElementById('myIFrm'); 
    oIFrm.src = url; 
    // alert(url); 
    // url=escape(url); 

    setTimeout(function() { deletefile(url); }, 25000); 

} 
+0

thnx man ... es hat funktioniert –