2013-05-10 16 views
28

So come ricevere dati del server o errore. Ci sono molti modi. Per esempio:Prevent Unhandled jQuery AJAX Errore

$.ajax({ 
    type: "get", 
    url: "/widgets/", 
    success: function (data, text) { 
     console.log('this is a data'); 
    }, 
    error: function (request, status, error) { 
     console.log('this is an error'); 
    } 
}); 

Si prega di vedere questa immagine:

result in chrome developer console

ho la mia funzione di errore e faccio quello che mi serve lì. Come impedire l'errore nella prima riga. Ho testato errori 4xx e 5xx ma nessuna differenza. So che l'utente non vede questo errore quando la console per gli sviluppatori è nascosta.

Ho bisogno di questo per progettare un'API. So che posso inviare 200 risposte dal server con un argomento aggiuntivo che mostra che si tratta di un errore o un risultato positivo.

Ma se posso inviare risposte 4xx o 5xx, non è necessario alcun argomento aggiuntivo. In questo modo ho alcuni guadagni aggiuntivi per me. Ad esempio, posso applicare risultati di successo ai miei modelli lato client senza preoccuparmi di argomenti aggiuntivi.

Grazie

+0

jquery-1.9.1.js: 8526 '// Questo potrebbe sollevare un'eccezione che è actually' ' // trattati in jQuery.ajax (quindi non try/catch qui) '' xhr.send ((s.hasContent && s.data) || null); ' – iman

+4

Il wrapping di' xhr.send' in un 'try/catch' fa ** not ** impedisce la visualizzazione dell'errore nella console degli sviluppatori. Si noti che questi sono * non * errori/eccezioni JS, ma sono correlati alla * richiesta * inviata dal browser, quindi il tentativo di catturare un errore JS non funzionerà. – gkalpak

+0

Prova questa risposta: http://stackoverflow.com/questions/7436195/disabling-some-jquery-global-ajax-event-handlers-for-a-request – JVE999

risposta

12

per quanto ne so non è possibile effettuare le thingies rossi andare via, al ritorno di errore di stato codici (4xx, 5xx). Vengono utilizzati dal browser per indicare che qualcosa potrebbe non essere andato come previsto. Ancora questi sono semplici decorazioni, dal momento che i codici di stato 4xx e 5xx sono perfettamente validi, quindi non vedo un motivo per cui desideri eliminarli.

Come hai detto tu stesso, l'altra alternativa avrebbe inviato "200 risposte dal server con un argomento aggiuntivo che mostra che si tratta di un errore o un risultato positivo".

Raccomando sicuramente di utilizzare i codici 4xx e 5xx (è quello per cui sono stati progettati) e di smettere di preoccuparsi degli avvertimenti di head-up del browser nella console degli sviluppatori (ovvero gli oggetti rossi).

Vedere anche this e this domande che si riferiscono a errori simili durante il recupero di altri tipi di risorse (immagini, file, ecc.). Gli errori che vedi sono in realtà della stessa natura.

+2

C'è un caso in cui sarebbe bello evitare la segnalazione di questi errori: test (specialmente test senza testa di app web). Ad esempio, si scrive un test (ad esempio con mocha-phantonJS) per una richiesta ajax non riuscita. È fastidioso che tutti questi errori compaiano nel riepilogo dei test. – emepyc

+0

Ho un controllo per vedere se esiste una pagina, e l'errore rosso fa sembrare che qualcosa sia andato storto, quindi sarebbe bello sopprimerlo. – JVE999

+1

@ JVE999: la mia risposta è valida. Non essere "rosso-cosa-fobico"! 4xx e 5xx sono codici validi e non puoi fare nulla su come un browser sceglie di registrarli (né dovresti preoccuparti).Se sei troppo preoccupato per un utente che apre la console e giudica erroneamente la tua app a causa di qualcosa di rosso, forse potresti registrare un messaggio per spiegarlo e far loro sapere che è un comportamento previsto. – gkalpak