javascript循环调用自身

标签 javascript jquery asp.net

我的代码中的逻辑有问题,我想我已经看它太久了才找到它。当此代码在 30 秒超时后执行时,根据调试器,它似乎递归地调用 checkActivityStop,并向 reset.aspx 发出大量 get 请求。

更大的图片是我有 javascript 尝试匹配 asp.net session 变量的时间。当 session 变量即将过期时,我为 body 标记设置了一个单击和按键处理程序,该处理程序会导致向虚拟页面发出 get 请求,该页面“应该”导致刷新 session 变量。

var sessionTime = 0;
var session;
var sessionTimer;

function resetSession() {
$.get("reset.aspx", function (data) {
    $("#dbCheck").html(data);
    if ($("#resetSession").length) {
        clearSessionTimeout();
        setSessionTimeout();
        //alert("session reset");
    }
});
}

function checkActivityStart() {
  $("body").bind("click", resetSession());
  $("body").bind("keypress", resetSession());
  console.trace("checking activity");
}

function checkActivityStop() {
  $("body").unbind("click", resetSession());
  $("body").unbind("keypress", resetSession());
  console.trace("stopping activity");
}

function setSessionTimeout() {
sessionTimer = setTimeout(function () { checkActivityStart(); }, 30000);
}

function clearSessionTimeout() {
clearTimeout(sessionTimer);
checkActivityStop();
sessionTime = 0;
}

$(document).ready(function () {
    setSessionTimeout();});

有人可以给我第二双眼睛来帮助我找到导致这种递归行为的原因吗?希望这足以让其他人看到问题,但我会根据要求提供更多内容。

最佳答案

您需要传递resetSession的函数引用,而不是调用函数resetSession()并使用其返回值,即undefined作为点击处理程序。

$("body").bind("click", resetSession);

而不是

$("body").bind("click", resetSession());

更新您的以下功能

function checkActivityStart() {
    $("body").bind("click", resetSession);
    $("body").bind("keypress", resetSession);
    console.trace("checking activity");
}

function checkActivityStop() {
    $("body").unbind("click", resetSession);
    $("body").unbind("keypress", resetSession);
    console.trace("stopping activity");
}

关于javascript循环调用自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34590832/

相关文章:

jquery - CSS/jQuery : background color for JUST the text in an input

javascript - 无法正确添加变量

c# - Windows azure REST API 列出容器问题

javascript - 在 Javascript 中使用迭代器比较两个数组中的值?

jquery - 如何在没有帖子的情况下在 ASP.Net MVC 3 中保留值?

javascript - 输入变化更新价格div

c# - 在 mysql 和 gridview 中按年份和日期排序

asp.net - 性能明智 MVC 是否比 ASP.NET 中的 Web 窗体更好

javascript - 如何调用 js_of_ocaml 生成的函数?

javascript - Meteor 和 React 具有响应式样式