Как отображать анимированный значок во время обработки запроса Ajax - Rails 3

Я пытаюсь показать индикатор загрузки для каждого запроса ajax, я работаю в приложении rails 3.

HTML:

<div id="loading-indicator">
 <%= image_tag("loading.gif", :id => "loading-indicator", :style => "display:none") %>
</div>

CSS

#loading-indicator {
   position: absolute;
   left: 10px;
   top: 10px;
 }

loading.js:, который я разместил в assest/javascripts/

$(document).ready(function(){
    $(document).ajaxSend(function(event, request, settings) {
        $('#loading-indicator').show();
    });

    $(document).ajaxComplete(function(event, request, settings) {
        $('#loading-indicator').hide();
    });
});

My application.js выглядит так:

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .

Доцентная работа, ничего не появляется. Любая помощь будет оценена.

Ответ 1

Обычно я сохраняю этот кусок кода в таких ситуациях:

$(function() {
  $('#loading-indicator')
    .hide()  // hide it initially.
    .ajaxStart(function() {
      $(this).show(); // show on any Ajax event.
    })
    .ajaxStop(function() {
      $(this).hide(); // hide it when it is done.
  });
});

--- EDIT ---

Это не будет работать с последними версиями jQuery. Начиная с jQuery 1.8, метод .ajaxStart() должен быть привязан только к document. Поэтому код должен выглядеть следующим образом:

$(function() {
  $('#loading-indicator').hide();  // hide it initially.
  $(document)  
    .ajaxStart(function() {
      $('#loading-indicator').show(); // show on any Ajax event.
    })
    .ajaxStop(function() {
      $('#loading-indicator').hide(); // hide it when it is done.
  });
});

Ответ 2

Вы технически не можете использовать один и тот же "id" дважды для двух разных элементов в одном документе. т.е. вы присваиваете id = "load-indicator" как тегам div, так и img; это может вызвать ошибки JS DOM и ошибки манипуляции.

Ответ 3

Проблема была в теге стиля css и позиции css

Я исправляю это, делая это:

HTML:

<div id="loading-indicator">
 <%= image_tag("loading.gif", :id => "loading-indicator") %>
</div>

CSS

#loading-indicator {
   left: 10px;
   top: 10px;
 }