1
function load_result()
{
    $.getJSON( "http://somesite.com/loadresult.php", function(data) {
        if( data == undefined || data == null )
        {
            console.log( "no data" );
            clearTimeout( lr_timeout );
            lr_timeout = setTimeout( "load_result()", 2000 );
            return;
        }
        insert_result_price( data );
        clearTimeout( lr_timeout );
        lr_timeout = setTimeout( "load_result()", 50 * ( Math.random() * 10 ) );

    } );
}

并且lr_timeout是全局定义的,并且load_result函数最初在document.ready函数中启动。问题是该函数并不总是运行。我将在 Firebug 中观看它,并且我在 setInterval 上设置了另一个函数,该函数始终有效。

想法?

4

2 回答 2

2

您的其他setTimeout功能(始终有效的功能)是否也在 a 内$.getJSON?如果是这样,它是否在同一个 URL 上调用它(http://somesite.com/loadresult.php在您的示例中,但我确信它在现实生活中有所不同)?

这可能http://somesite.com/loadresult.php是一个不稳定的资源,并且您的不一致结果是由于该资源,而不是setTimeout. 当然,如果他们都使用相同的资源,那么这不是问题。

于 2010-01-02T18:28:30.377 回答
1

我通常从未遇到过 setTimeout 的问题,并且我已经在 J​​S 中将它用于主/无限循环很多次,而它从来没有出现过问题。我会想象一次调用 load_results 的 clearTimeout 会踩到另一次调用的 setTimeout,尤其是因为它响应的 GET 请求可能比浏览器到达下一个 setTimeout 所需的时间更长。实际上这里有多个线程,您无法控制它们,也没有可用的同步机制。

于 2010-01-02T18:21:54.740 回答