jQuery(ajax)$ .get方法延迟了结果

时间:2011-01-28 12:08:13

标签: php jquery ajax get

我正在使用$ .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)'又在那里......

2 个答案:

答案 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)调用的相同函数。这样,您的内容就会立即生效。