Il linguaggio JavaScript
 

Gestione eventi ajax (ajaxStop, ajaxError etc...) non sempre funzionante.

GriS 16 Dic 2015 09:50
Ciao a tutti,
ho ereditato codice fatto da altri e tra le varie cose da distemare devo
risolvere il caso di una icona tipo "spinner" che non scompare al
termine di chiamate ajax che o vanno in errore o hanno problemi in
genere (sto ancora debuggando in cerca del vero motivo).

Al momento, lo spinner è gestito così:

$("#spinner").bind("ajaxSend", function() {
$(this).show();
}).bind("ajaxStop", function() {
$(this).hide();
}).bind("ajaxError", function() {
$(this).hide();
});

Sottolineando che, in alcuni casi ancora non definiti, $(this).hide();
non viene eseguita, sapete consigliarmi il modo migliore per gestire
comunque tutte le casistiche di una chiamata ajax?

Grazie in anticipo
Alessandro Pellizzari 16 Dic 2015 21:19
Il Wed, 16 Dec 2015 09:50:13 +0100, GriS ha scritto:

> Al momento, lo spinner è gestito così:
>
> $("#spinner").bind("ajaxSend", function() {
> $(this).show();
> }).bind("ajaxStop", function() {
> $(this).hide();
> }).bind("ajaxError", function() {
> $(this).hide();
> });

Non ho mai usato questi eventi, ma stando alla documentazione di jQuery
vengono lanciati su document, non su elementi del DOM. Probabilmente li
catturi grazie al bubbling, ma non so cosa sia il this in quel caso.

Io farei così:

$(document)
.on('ajaxStart', function() {
$('#spinner').show();
})
.on('ajaxStop', function() {
$('#spinner').hide();
})
;

Dovrebbero bastare questi due, in teoria.

Bye.
GriS 17 Dic 2015 12:02
Grazie per la risposta,
proverò il tuo codice anche se non ho capito, ajaxStop non credo che
gestisca anche l'error, o sbaglio?

Grazie ancora.

Il 16/12/2015 21.19, Alessandro Pellizzari ha scritto:
> Il Wed, 16 Dec 2015 09:50:13 +0100, GriS ha scritto:
>
>> Al momento, lo spinner è gestito così:
>>
>> $("#spinner").bind("ajaxSend", function() {
>> $(this).show();
>> }).bind("ajaxStop", function() {
>> $(this).hide();
>> }).bind("ajaxError", function() {
>> $(this).hide();
>> });
>
> Non ho mai usato questi eventi, ma stando alla documentazione di jQuery
> vengono lanciati su document, non su elementi del DOM. Probabilmente li
> catturi grazie al bubbling, ma non so cosa sia il this in quel caso.
>
> Io farei così:
>
> $(document)
> .on('ajaxStart', function() {
> $('#spinner').show();
> })
> .on('ajaxStop', function() {
> $('#spinner').hide();
> })
> ;
>
> Dovrebbero bastare questi due, in teoria.
>
> Bye.
>

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio JavaScript | Tutti i gruppi | it.comp.lang.javascript | Notizie e discussioni javascript | Javascript Mobile | Servizio di consultazione news.