2014-06-23 63 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)。你提供的是函数调用的返回值。

相关问题