2013-10-25 2 views
1

У меня есть функция, которая отображает содержимое сообщений при нажатии. Я хочу, чтобы загрузочный счетчик отображался и задерживался для нескольких разделов до появления содержимого сообщения. Проблема здесь в том, что когда я нажимаю на каждое сообщение, счетчик появляется, возможно, 1 мс, а в некоторых случаях он исчезает задолго до появления содержимого.Загрузка Spinner Image слишком быстро при запуске функции

function showPost(id) { 
    setTimeout(function() {$('#loader').show();},1); 
    $('#pcontent').empty(); 
    $.getJSON('http://howtodeployit.com/category/daily-devotion/?json=get_post&post_id=' + id + '&callback=?', function(data) { 
    var $postcon = $('<div/>').append([$("<h3>", {html: data.post.title}),$("<p>", {html: data.post.content})]); 
     $postcon.appendTo('#pcontent'); 
    }); 
} 

Spinner HTML:

<div id='loader'><img src="css/images/loader.gif"/></div> 
+0

делает то Элемент #loader находится в элементе #pcontent. Это ребенок этого элемента? Если это так, вы очистите его сразу после того, как вы установите показания счетчика. –

+0

Зачем вам нужно вызвать функцию setimeout? – eggward

+0

бит таймаута закомментирован, так как я просто тестировал – Chelseawillrecover

ответ

0

Попробуйте это:

function showPost(id) { 

    $('#loader').show(); 
    $('#pcontent').empty(); 

    $.ajax({ 
     url: 'http://howtodeployit.com/category/daily-devotion/?json=get_post&post_id=' + id + '&callback=?', 
     dataType: 'json', 
     success: function (data) { 
      var $postcon = $('<div/>').append([$("<h3>", { 
       html: data.post.title 
      }), $("<p>", { 
       html: data.post.content 
      })]); 
      $postcon.appendTo('#pcontent'); 
      $('#loader').hide(); 
     } 

    }); 

} 
+0

Я не планировал использовать вызов ajax для загрузки содержимого сообщения, но, поскольку вы предложили его здесь, у меня нет выбора использовать его. Сначала я пытаюсь использовать этот подход: beforeSend: function() {$ ('# loader'). Show(); }, complete: function() {$ ('# loader'). Hide(); }, – Chelseawillrecover

+0

Использование ваших сообщений не появляется. Консоль зарегистрировала «данные», но без контента – Chelseawillrecover

+1

ОК, единственное, чего не хватает в вашем предложении, это «dataType:« json »' – Chelseawillrecover

0

рисунок всегда ведут себя по-разному на каждом device..basically это зависит от скорости обработки устройства. поэтому лучше использовать графические спрайты и анимировать их с помощью javascript. В вашем случае при загрузке страницы ничего не обрабатывается .. но как страница начинает загружать процессор устройства, не справляется с нагрузкой, и в результате ваше изображение gif становится медленнее

0

Кажется, что из вашей последней прокомментированной строки вы используете таймаут, чтобы скрыть загрузчик. Вместо этого Вы должны обращаться скрытие внутри функции обратного вызова вашего AJAX запроса, так что загрузчик скрывает после запроса завершения, а не по истечении определенного промежутка времени:

function showPost(id) { 
    $('#loader').show(); 
    $('#pcontent').empty(); 
    $.getJSON('http://howtodeployit.com/category/daily-devotion/?json=get_post&post_id=' + id + '&callback=?', function(data) { 
     $('#loader').hide(); 
     var $postcon = $('<div/>').append([$("<h3>", {html: data.post.title}),$("<p>", {html: data.post.content})]); 
     $postcon.appendTo('#pcontent'); 
    }); 
} 
+0

Я тоже пробовал ваш подход. Я не говорю, что spinner не показывает, но несколько раз, он показывает слишком быстро и несколько миллисекунд задерживается до того, как появится фактическое сообщение. – Chelseawillrecover

+1

Также убедитесь, что загрузчик не является дочерним элементом 'pcontent', иначе вы будете удалять загрузчик как как только вызывается 'showPost'. –

Смежные вопросы