我正在使用$ .get()从php脚本中获取一些元素,然后通过将它们“写入”div来显示结果。这是定期完成的,以及单击div或页面重新加载时。这是代码:
function fetchnew(){
var status = $J.cookie("status_on");
if (status == 'on'){
//fetch new items
//results from new-items.php have this format:
//<p>Item1</p><p>Item2</p>...
$J.get(modulebaselink+'new-items.php', '', function(newitems){
$J('#content').html(newitems);
updatestatus();
});
}
fetchnew_timeout = setTimeout('fetchnew();', refresh_rate);
}//end fetchnew()
function updatestatus(){
var status = $J.cookie("status_on");
if (status == 'on'){
//Show number of loaded items
var totalItems=$J('#content p').length;
$J('#status').html("Items ("+totalItems+")");
}
}
我的问题是页面重新加载后#status内容显示有一些延迟。当页面加载时,我得到'Items(0)'约1秒,然后0变为实际值。在显示真实值之前,有没有办法使'Items(0)'无效?或者至少,缓存前一个值并在'Items(new_value)'出现之前显示'Items(old_value)'而不是'Items(0)'。我尝试过饼干做最后一个,但'Items(0)'又在那里......
答案 0 :(得分:2)
听起来像localStorage
的合理用例。像这样扩展updatestatus()
:
// this should be called at some entry point of your script
var ls_available = 'localStorage' in window;
if(ls_available && localStorage.getItem('totalItems'))
$J('#status').html("Items ("+localStorage.getItem('totalItems')+")");
function updatestatus(){
var status = $J.cookie("status_on");
if (chat_status == 'on'){
var totalItems=$J('#content p').length;
$J('#status').html("Items ("+totalItems+")");
if(ls_available) localStorage.setItem('totalItems', totalItems);
}
}
答案 1 :(得分:0)
如果您的页面(调用fetchnew()
的页面)在PHP中呈现,请调用Ajax文件(new-items.php
)调用的相同函数。这样,您的内容就会立即生效。