【问题标题】:setInterval does not call a functions after the specified time [duplicate]setInterval 在指定时间后不调用函数[重复]
【发布时间】:2014-06-23 04:29:47
【问题描述】:

在一个 JS 函数中我调用另一个,.. 我想每 30 秒调用一次

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);
         }
     });
  }

只在第一次调用

【问题讨论】:

标签: javascript setinterval


【解决方案1】:

您没有在setInterval 的第一个参数中调用函数。调用函数返回该函数的值,而不是对该函数的引用。在你的情况下,它返回undefined

您只需传递function 的引用。您可以使用匿名函数,然后从那里调用。

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

来自 cmets:

  1. 传递的是函数对象,而不是“引用”
  2. 作为第一个参数的函数调用如果返回一个函数就可以了。

【讨论】:

  • Nit:函数对象传递,而不是“引用”
  • 嗯,第一个参数的 value 设置为对函数对象的引用。如果函数调用返回一个函数:setTimeout(function(){return function(){...}}(), 0),则作为第一个参数的函数调用很好。 :-)
【解决方案2】:

setInterval 接受一个函数名(即 AddFormToSession)。您提供的是函数调用的返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2020-06-17
    • 2017-12-27
    相关资源
    最近更新 更多