2010-07-27 10 views
12

Voglio avvisare l'utente ogni volta che si verifica un errore AJAX. È possibile farlo tramite $.ajaxSetup:

$.ajaxSetup({ 
    error: function() { 
    alert("OOPS!") 
    } 
}); 

But the jQuery docs recommend against this:

Nota: le funzioni di callback globali dovrebbero essere impostati con i rispettivi globali Ajax gestore eventi metodi-.ajaxStart(), .ajaxStop (), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend() - piuttosto rispetto all'oggetto impostazioni per $ .ajaxSetup().

quindi credo che dovrei fare questo:

$("#some_random_div").ajaxError(function() { 
    alert("OOPS!") 
}); 

Questo non ha senso per me: il callback errore di AJAX riguarda la mia domanda nel suo complesso, non è un elemento di pagina specifica . Quindi, perché la funzione di callback dovrebbe essere associata a un singolo elemento di pagina?

Quindi: perché i documenti jQuery consigliano di utilizzare quello che sembra un approccio meno leggibile e quale approccio è il migliore?

+0

preferisco ajaxSetup per questo scopo. – Kris

risposta

7

L'utilizzo tipico è che l'elemento di pagina specifica che legherai ajaxError a è il div in cui il messaggio di errore sta per essere visualizzato ; forse un messaggio "flash" div nella parte superiore della pagina. In questo modo hai accesso diretto a quel div per aggiungere il tuo messaggio.

Ma se non si utilizza un particolare elemento DOM come area di visualizzazione dei messaggi, è possibile associarlo a $(document) o ad un altro elemento globale di questo tipo.

+2

A partire da jQuery 1.9, gli eventi ajax dovrebbero essere usati comunque su 'document', quindi dovrebbe essere simile a' $ (document) .ajaxError (function() {...}) 'o' $ (document) .on ("ajaxError ", function() {...})'. Il motivo per cui i documenti dicono di non usare '$ .ajaxSetup()' per questo è che sono solo le * impostazioni * predefinite per una richiesta; qualsiasi richiesta che definisca il proprio gestore di 'error' rovinerebbe quella impostata in' $.ajaxSetup() 'che probabilmente non è quello che volevi. –

0

è possibile collegare la funzione di errore a tutto il corpo in questo modo:

$('body').ajaxError(function() { 
    alert("OOPS!") 
}); 
+1

Ma non è meno leggibile dell'approccio 'ajaxSetup()'? Vale a dire, la funzione qui non ha * nulla * da fare con il corpo del documento (in un altro modo, se potessi ottenere lo stesso effetto sostituendo "corpo" per * qualsiasi * altro elemento, questo sembra l'approccio sbagliato) –

0

Potrebbero esistere circostanze in cui potrebbe riguardare un singolo controllo, ad esempio quando si dispone di un completamento automatico che esegue il round trip del database tramite ajax, al contrario di un'intera pagina come su un invio. Ciò determinerebbe quindi se si desidera isolare l'errore su un componente della pagina e, in tal caso, quale dovrebbe essere la risposta all'errore piuttosto che con un approccio più generico.


Problemi correlati