2012-07-30 12 views
11

Próbuję wyświetlić wskaźnik ładowania dla każdego żądania ajax, pracuję w aplikacji rails 3.Jak wyświetlić animowaną ikonę podczas przetwarzania żądania 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: które umieszczone w assest/JavaScript/

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

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

Moi application.js wygląda następująco:

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

To dosent praca, nic nie pokazuje się. Każda pomoc będzie doceniona.

+0

Zacznę od obejrzenia konsoli błędów JS, aby zobaczyć, czy coś poszło nie tak! Sprawdź także, czy plik load.js jest poprawnie załadowany przez wykonanie nagłówka wygenerowanego HTML –

+0

@AnthonyAlberto Jest poprawnie załadowany i nie dostałem błędu w firebugu – SHUMAcupcake

+0

Czy to GET czy POST? Ponadto, jaki typ elementu html (tj. ** a **, ** button **, ** input ** itp.) Próbujesz zhodować? Zestawy plików UJS szyny [różne ustawienia domyślne ajax] (http://blog.madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html) w zależności od kategorii elementu html – stephenmurdoch

Odpowiedz

16

zazwyczaj mam ten fragment kodu zapisanego na sytuacje takie jak:

$(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 ---

to nie będzie działać z najnowszymi wersjami jQuery. Od wersji jQuery 1.8, metoda .ajaxStart() powinna być dołączana tylko do document. Kod powinien zatem wyglądać następująco:

$(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. 
    }); 
}); 
+0

bez (dokument) .ready (funkcja)? lub z tym? – SHUMAcupcake

+0

Wewnątrz funkcji gotowości JQuery.Edytowano odpowiedź. – MurifoX

+0

sooria mate to nie działa. - może muszę dodać trochę czasu? ładuje się szybko? – SHUMAcupcake

0

Problem był w znaczniku style css i pozycji css

to naprawić wykonując to:

HTML:

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

CSS:

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

Z technicznego punktu widzenia nie można użyć tego samego "identyfikatora" dwukrotnie dla dwóch różnych elementów w tym samym dokumencie. tj. przypisujesz id = "load-indicator" zarówno znacznikom div, jak i img; może to powodować wybór JS DOM i błędy manipulacji.

Powiązane problemy