10
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,我在 25 秒后最后调用了一个函数,但是它没有延迟 deletefile(url) 函数并在之后执行。那么应该是什么问题?

4

2 回答 2

19

在这一行中,您正在调用您的函数并将其结果传递给setTimeout().

setTimeout(deletefile(url), 25000);

如果要延迟执行,请添加包装函数:

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

编辑

@Petah 提出的替代方案:

setTimeout(deletefile, 25000, url);

延迟后传递给的所有参数setTimeout(),将在执行时传递给函数。因此,在这种情况下,您按顺序将对函数的引用 、延迟和参数传递给函数!

请注意,根据MDN,这种传递参数的方式在 IE9 之前的 IE 中不起作用。

于 2012-12-22T09:51:23.410 回答
3

那是因为您正在调用该函数,并在 setTimeout 调用中使用返回值。将其包装在一个匿名函数中,以便由 setTimeout 调用它:

function tryToDownload(url) {

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

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

}
于 2012-12-22T09:52:31.113 回答