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

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

     setTimeout(deletefile(url), 25000); 
} 

segue è funzione deletfileperché non setTimeout ritardare l'esecuzione funzione?

function deletefile(url){ 

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

    } 
    }); 
} 

di cui sopra è la mia jQuery e im chiamando una funzione alla fine dopo 25 secondi, ma in qualche modo non è ritardare la funzione DeleteFile (url) ed eseguire solo after.So quale dovrebbe essere il problema?

+0

possibile duplicato del [JavaScript setTimeout] (http://stackoverflow.com/questions/4128938/javascript-settimeout) – Fraser

+1

@Fraser: Che non è proprio un duplicato IMHO. – Matt

risposta

19

In questa linea si chiama la funzione e si passa il suo risultato a setTimeout().

setTimeout(deletefile(url), 25000); 

Se si vuole ritardare l'esecuzione, aggiungere una funzione wrapper:

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

EDIT

Un'alternativa proposta da @Petah:

setTimeout(deletefile, 25000, url); 

Tutti i parametri passato a setTimeout() dopo il ritardo, sarà passato alla funzione all'esecuzione. Quindi, in questo caso, si passa il riferimento alla funzione, il ritardo e quindi il parametro della funzione in questo ordine!

nota che secondo MDN questo modo di passare parametri non funzionerà in IE prima IE9.

+0

@Bhavik Kama: Se tu avessi 'foo (DeleteFile (url))', che sarebbe chiamare 'deletefile' subito e passare il suo valore di ritorno in' foo', giusto? Quindi è esattamente lo stesso con 'setTimeout', come diceva Sirko. –

+2

O .... 'setTimeout (DeleteFile, 25000, url)' – Petah

+0

@Petah, passando parametri aggiuntivi alla funzione non funziona in Internet Explorer –

3

Questo perché si sta chiamando la funzione, e utilizzando il valore di ritorno nella chiamata setTimeout. Avvolgerlo in una funzione anonima in modo che si chiama da setTimeout:

function tryToDownload(url) { 

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

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

} 
+0

thnx man ... ha funzionato –