2014-06-23 61 views
0

裏面一個JS函數我調用另一個,..我想叫它每隔30秒的setInterval不會調用一個函數在指定時間後

function showPopup() { 
    $.get("/Feedback.aspx", function (data) { 
     if (post_HasError(data)) 
      return; 
     initPopup("popup-common", "feedback", data); 
    }); 
    setInterval(AddFormToSession(3), 30000); 
} 
function AddFormToSession(form) { 
    alert(1); 
    var url1 = form == 3 ? "Feedback.aspx/AddFormToSession" : "Request.aspx/AddFormToSession"; 
    $.ajax 
    ({ 
     type: "POST", 
     async: true, 
     url: url1, 
     data: "{'funcParam':'" + $('#aspnetForm').serialize() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) 
     { 
      console.log(msg.d); 
     } 
    }); 
    } 

+0

'setInterval(AddFormToSession(3),..)' - 立即調用回調函數並將其用作參數;是的,這*是*重複 – user2864740

+0

http://stackoverflow.com/questions/2037203/why-is-my-function-call-that-should-be-scheduled-by-settimeout-executed-immediat,http: //stackoverflow.com/questions/15378302/settimeout-does-not-delay,http://stackoverflow.com/questions/4120781/settimeout-ignores-timeout-fires-immediately?lq=1 – user2864740

+0

功能以外的地方。 – byJeevan

回答

4

您不要在第一個參數setInterval中調用函數。調用函數返回該函數的值,而不是該函數的引用。在你的情況下,它返回undefined

您只需傳遞function的參考號。您可以使用匿名功能,然後從那裏撥打電話。

setInterval(function() { 
AddFormToSession(3); 
}, 30000); 

從評論:

  1. 函數對象傳遞,而不是一個「參考」
  2. 函數調用的第一個參數是好的,如果它返回的功能。
+0

Nit:函數對象*被*傳遞,而不是「參考」 – user2864740

+0

嗯,第一個參數的*值*被設置爲對函數對象的引用。函數調用作爲第一個參數很好,如果它返回一個函數:'setTimeout(function(){return function(){...}}(),0)'。 :-) – RobG

0

的setInterval接受被稱爲僅第一次一個函數名稱(即AddFormToSession)。你提供的是函數調用的返回值。

相關問題