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上设置了另一个始终有效的函数。
想法?
答案 0 :(得分:1)
您的其他setTimeout
功能(始终有效的功能)是否也位于$.getJSON
内?如果是这样,它是否在相同的网址上调用它(在您的示例中为http://somesite.com/loadresult.php
,但我确定它在现实生活中有所不同)?
http://somesite.com/loadresult.php
可能是一个片状资源,而您的不一致结果是由该资源引起的,而不是setTimeout
。当然,如果他们都使用相同的资源,那么这可能不是问题。
答案 1 :(得分:0)
我从来没有经历过setTimeout的问题,而且我已经将它用于JS中的主/无限循环很多次而没有遇到问题。我可以想象,一次调用load_results的clearTimeout正在从另一个调用setTimeout,特别是因为它响应的GET请求可能需要比浏览器更长时间到达下一个setTimeout所需的时间。实际上这里有多个线程,你无法控制它们,并且没有可用的同步机制。