2010-04-27 19 views
7

Esiste un modo per gestire le eccezioni generate dai callback AJAX in jQuery, oltre all'aggiunta di un blocco try..catch a ogni callback? La funzione di errore non viene chiamata in questa situazione.Eccezioni lanciate in jQuery Chiamate AJAX ingerite?

$.ajax(
{ 
    url: 'myurl.rails', 
    success: function(data) 
    { 
     throw 'Oh no!'; 
    }, 
    error: function (xhr, textStatus, errorThrown) 
    { 
     console.log('AJAX call failed', xhr, textStatus, errorThrown); 
    }    
}); 

risposta

5

Se si dà un'occhiata alla versione non minificata di jQuery 1.4.2, le righe rilevanti sono da 5264 a 5274. jQuery chiama semplicemente la funzione success applicata all'oggetto delle impostazioni (se esiste) senza alcuna attenzione a ciò che il la funzione ritorna o getta.

Che cosa si può fare, invece è usare jQuery.ajaxSetup() in questo modo:

jQuery.ajaxSetup({ 
    success: function() { 
     try { 
      if (this.mysuccess) { 
       this.mysuccess.apply(this, arguments); 
      } 
     } 
     catch(err) { 
      // whatever 
     } 
    } 
}); 

E utilizzare mysuccess (o come si preferisce chiamarlo), invece di success ai singoli jQuery.ajax chiamate.

+0

Sono curioso se qualcuno sa * perché * non importa se viene lanciata un'eccezione: http://stackoverflow.com/questions/11800349/why-does-jquery-swallow-exceptions-in-ajax-success- callback –

0

Hai guardato in una delle caratteristiche globali AJAX di jQuery, come ajaxSetup e ajaxError?

+1

Come detto da Justin, il callback error/ajaxError è per le richieste non riuscite, non per le eccezioni generate nel codice dell'applicazione nel callback di successo. – MikeWyatt

0

Il callback error è progettato per essere utilizzato quando c'è un problema con la richiesta stessa. Secondo i documenti:

Una funzione da chiamare se la richiesta non riesce. La funzione ha superato tre argomenti: L'oggetto XMLHttpRequest, una stringa che descrive il tipo di errore che si è verificato e un oggetto di eccezione facoltativo, se si è verificato. I valori possibili per il secondo argomento (oltre a null) sono "timeout", "error", "notmodified" e "parsererror".

Quindi, se invece c'è un problema con i dati che si ottiene indietro, allora si dovrebbe fare con esso all'interno della success callback - forse accedendo alla console o avvisare l'utente.

+0

Io uso un bel po 'di AJAX nel mio sito e avvolgo ogni singolo callback di successo in un blocco try.atch con registrazione non è l'ideale. – MikeWyatt

+0

Ci sono specifici tipi di errori che stai vedendo sul tuo sito? Che cosa stai vedendo esattamente e cosa hai intenzione di fare una volta rilevato un errore? –

+0

Voglio solo registrare qualsiasi eccezione possa essere generata. Il tipo di eccezione specifico non ha importanza, a parte il fatto che sia inaspettato. – MikeWyatt

Problemi correlati