10
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秒後に最後に1つの関数を呼び出していますが、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 に答える