为什么settimeout没有延迟函数执行?

时间:2012-12-22 09:49:55

标签: javascript jquery ajax liferay settimeout

function tryToDownload(url)
{

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

      setTimeout(deletefile(url), 25000); 
}

以下是deletfile函数

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)函数并在之后执行。那么应该是什么问题?

2 个答案:

答案 0 :(得分:19)

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

setTimeout(deletefile(url), 25000);

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

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

修改

@Petah提出的替代方案:

setTimeout(deletefile, 25000, url);

延迟后传递给setTimeout()的所有参数将在执行时传递给函数。所以在这种情况下,你将引用传递给函数,延迟,然后按顺序将参数传递给函数!

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

答案 1 :(得分:3)

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

function tryToDownload(url) {

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

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

}