Page 1 sur 1

Exceptions non attrapées

Posté : 10 juin 2011, 15:00
par devlop78
A croire que cela n'est pas géré par Javascript, mais je me retrouve avec des exceptions non attrapés dans mon code javascript ... Ces exceptions là sont à priori totalement imprévisibles et je me vois mal mettre des try { } catch dans toutes mes méthodes. En comme mon code est entièrement évenementiel, mettre un try { } catch sur les méthodes qui lancent toute l'application, ça ne change rien ...

Donc, lors d'une erreur après une reception ajax, je me retrouve avec mon image ajax qui continue de tourner, avec l'impression que ... le serveur est bloqué. Cela a rendu au début le débogage difficile car je regardais ce qui pouvait créer une boucle infinie dans mon code php (et c'est pas mon genre), maintenant je vais directement voir le paneau Firefox pour les erreurs. Mais niveau débogage, ça n'est pas le top, et si une exception devait se lancer en production, je préfererais franchement que l'image ajax s'arrête, et que l'utilisateur voit une petite msgbox s'ouvrir avec un petit mot gentil lui disait qu'une erreur inattendue, lors de son opération, est apparue.

Donc, quelqu'un connait-il un moyen de déclarer une fonction qui recevra toutes les exceptions non attrapées et remontées ?

Re: Exceptions non attrapées

Posté : 11 juin 2011, 00:23
par Cyrano
Est-ce que l'erreur se produit coté client ou coté serveur ?

S'il s'agit d'une erreur coté serveur, as-tu mis en place quelque chose du genre error_handler qui te retournerait quelque chose d'exploitable en js coté client ?

Re: Exceptions non attrapées

Posté : 11 juin 2011, 04:11
par devlop78
Non, pas côté serveur. J'ai imposé un format strict de communication serveur vers client en JSON. Tout ce qui n'est pas JSON est attrapée avec $.ajaxSetup (jQuery) et ses différents paramètres, et analysé (analyse code HTTP tels que 404, etc. Par exemple, pour le 'module' ajax, une page inexistante renvoie un code 404 et un contenu text/plain sans importance. Si une exception n'est pas attrapée, c'est un code 500 que je renvoie, si le navigateur execute une requête ajax sans identification (session expiré est le meilleur exemple), je renvoie un code HTTP adapté (mais je ne l'ai pas en tête)). Ainsi, le message d'erreur affiché est en fonction du contexte.

Moi je parle bien des erreurs javascript, en dehors de tout ajax : parse error, fonction inconnue, variable inconnue, etc. Dans la quasi totalité des cas, l'erreur apparait après pendant le développement, donc vite corrigé. Mais elle n'est pas vraiment visible, puisque rien ne l'attrape. Par ailleurs, je ne peux pas être sûr à 100% qu'aucune exception/erreur ne sera émise dans un contexte totalement imprévisible même après des tests poussés. Donc, au moins prévenir le client qu'une merde (pardonnée l'expression) s'est produite. Ce serait donc vraiment une fonction de "bas niveau" qui s'executerait quand "rien ne va plus". Rien à voir avec le serveur, une validation de données, ou un comportement à risque prévu et géré.

Re: Exceptions non attrapées

Posté : 13 juin 2011, 00:03
par devlop78
Ok. Je suis tombé dessus par hasard alors que ce n'était pas l'objet de ma recherche ... Comme quoi !

Solution :

Code : Tout sélectionner

window.onerror = function() { /* Code pour traiter l'erreur */ };
A savoir sur IE (bah oui, mon application avait un soucis sur IE, et son débuggeur ne m'aidait pas du tout ...) le premier argument pour la fonction renvoyait un (string)Message d'erreur.

Donc à voir si sur autres navigateurs ce que ça renvoie, et si il y a d'autres arguments (objet Exception, ligne, fichier ... ?).

Vive IE !! ^^