我只有一个页面,有时需要异步检查服务器,以查看页面的状态是否为当前状态(基本上是实时或离线)。您将看到我有一个带有var live的函数,该函数在页面最初加载时设置。然后,我向服务器发出ajax请求以检索live状态是true还是false。我将初始活动变量与新返回的数据json对象进行了比较。如果它们相同,则不执行任何操作,但是如果存在差异,则应用某些CSS类。我使用setTimeout递归运行它(是否有更好的方法来递归执行此操作?)。
我的问题:data.live从它的初始运行开始就没有变化,即使它在db中已更改。我知道我的MySQL正在工作,因为它会在初始负载时恢复正确的值。似乎是一个缓存问题。
任何帮助是极大的赞赏。
function checkLive() { var live = <?=$result["live"]?>; $.ajax({ type: 'get', url: '/live/live.php', dataType: 'json', success: function(data) { console.log('checking for updates... current:' + data.live); if (data.live == live) { return; } else { var elems = $('div.player_meta, object, h3.offline_message'); if (data.live == '1') { elems.removeClass('offline').addClass('live'); } else { elems.addClass('live').addClass('offline'); } } } }); setTimeout(function() { checkLive() } ,15000); } checkLive();
使用cache选项$.ajax()将高速缓存中断附加到URL,如下所示:
cache
$.ajax()
$.ajax({ type: 'get', url: '/live/live.php', dataType: 'json', cache: false, //success, etc. });
如果那不能解决问题,请看萤火虫,看看是否正在发出请求(肯定应该在此之后),如果它 仍然 是旧值,问题出在PHP,而不是JavaScript。
与此问题无关,只是一个提示:如果不需要参数,则可以跳过匿名函数调用,这是:
setTimeout(function() { checkLive() } ,15000);
可以是:
setTimeout(checkLive, 15000);