setTimeout重复调用函数并导致页面挂起

时间:2015-04-14 18:41:10

标签: spring-mvc

我定义了三个javascript函数,它们创建了对我的java控制器的ajax调用。我为两个函数设置了超时,每3秒更新一次ping状态,并每5分钟更新一次性能状态。每3秒ping一次更新似乎工作正常但是当调用updatePerformance方法时,我的控制器方法会连续执行5次左右,直到应用程序挂起。任何想法为什么一个工作,另一个setTimeout不是吗?这是我的javascript函数:

<script type="text/javascript">

function updateReachability() {
    $.ajax({
        url: 'updatePing.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
}
setTimeout(updateReachability, 3000);

function updatePerformance() {
    $.ajax({
        url: 'updatePerformance.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
}
setTimeout(updatePerformance, 300000);

function updateSiteList() {
    $.ajax({
        url: 'connector.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
}

2 个答案:

答案 0 :(得分:0)

您可能希望将函数包装在setTimeout本身中,以便settimeout特定于该函数而不是其他任何内容。

    <script type="text/javascript">

function updateReachability() {
    setTimeout(function() {
$.ajax({
        url: 'updatePing.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
},3000);

可能这对你有用。

答案 1 :(得分:0)

不知道为什么会这样,但是创建了一个单独的函数来设置两个超时值,然后在body onload上调用它:

<script type="text/javascript">

function updateSiteList() {
    $.ajax({
        url: 'connector.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
}

function updateReachability() {
    $.ajax({
        url: 'updatePing.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
}

function setTimeouts() {
setInterval(updateReachability, 3000);
setInterval(updatePerformance, 300000);
}

function updatePerformance() {
    $.ajax({
        url: 'updatePerformance.htm',
        type: 'GET',
        success: function(data) {
            $('#site').html(data);
        }
    });
}