Метод jQuery (ajax) $ .get задерживает результаты - PullRequest
2 голосов
/ 28 января 2011

Я использую $ .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 (old_value)» вместо «Items (0)» до появления «Items (new_value)».Я попробовал куки, чтобы сделать последний, но 'Items (0)' был там снова ...

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Звучит как разумный вариант использования 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);
    }
}
0 голосов
/ 28 января 2011

Если ваша страница (та, где вызывается fetchnew()) отображается в PHP, вызовите ту же функцию, которую вызывает Ajax-файл (new-items.php). Таким образом, ваш контент будет тут же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...