2016-09-14 2 views
-1

Suite à partir de cette question jQuery Ajax error handling, show custom exception messages J'essaie d'afficher à mes utilisateurs un message d'erreur personnalisé de ColdFusion (via AJAX) lorsqu'un formulaire est soumis, mais une erreur est survenue.jQuery Ajax rapport d'erreur avec ColdFusion

J'ai essayé de le faire en utilisant un <cfthrow errorcode="500" message="You did something wrong"/> standard qui serait revenir à jQuery un code d'état de réponse qui n'est pas 200 d'où il est facile de montrer l'erreur comme tel:

... 
error: function (xhr, textStatus, thrownError) { 
         $('p').text(thrownError); 
        } 

Cependant, dans la production de ColdFusion Il est recommandé de désactiver les rapports d'erreurs dans les paramètres de débogage des serveurs. Donc maintenant tout ce que mon utilisateur voit est "Internal server error" au lieu du message personnalisé.

Ma solution temporaire est maintenant de simplement faire un <cfreturn "Error: You did something wrong"/> <cfabort> puis de faire en sorte que jQuery recherche tout résultat renvoyé par le serveur où le texte commence par "Erreur:".

Je préfère utiliser la gestion des exceptions avec <cfthrow>. Comment cela peut-il être réalisé étant donné la recommandation de désactiver le débogage?

+1

La réponse est-elle un paquet JSON? Si c'est le cas, ajoutez un message de propriété et/ou d'erreur 'success' dans le fichier JSON et vérifiez les valeurs lorsque la réponse est reçue côté client. –

+0

Donc cela sera toujours traité dans la méthode 'success()' de l'appel ajax - ce que je suis en train de faire maintenant mais en recherchant la chaîne de 'Error:' dans le résultat retourné par ColdFusion. Il semble juste mal à gérer les erreurs dans la méthode de succès. –

+0

Il est faux, pour plusieurs raisons, y compris le référencement. Si la page est réussie, rien n'indique au moteur de recherche que la réponse de la page est erronée. –

Répondre

-1

<cfthrow> errorCode n'est pas la réponse du code d'état HTTP. Si vous lancez une erreur non interceptée, la valeur par défaut est de répondre avec un code d'état HTTP 500, quel que soit le code d'erreur de votre <cfthrow>. Dans ce cas, vous devez utiliser la méthode .error() du jquery.ajax() pour afficher un message à l'utilisateur. Plus souvent qu'autrement, vous voudriez éviter de lancer une erreur intentionnellement et juste inclure un en-tête de code de statut 500. Alternativement comme vous l'avez indiqué dans votre question, vous pouvez return avec une certaine valeur qui est traitée sous conditions dans le .success() de votre $.ajax().

+0

Oui, mais le problème est que la méthode 'erreur()' ne peut pas afficher le message d'erreur parce que son rapport d'erreur est désactivée dans l'administrateur ColdFusion sur les serveurs de production - d'où mon Dilema/question. –

+0

Si vous souhaitez renvoyer l'erreur du serveur au client, vous devez saisir l'erreur et renvoyer l'erreur ou juste error.message. Il n'y a rien de naturel à ce que CF donne des informations d'exception à javascript. Il existe une raison pour laquelle les informations d'exception sont généralement désactivées sur un système de production. –

1

J'ai rencontré un problème similaire. Essayez ceci s'il vous plaît: Assurez-vous d'abord "Activer les codes d'état HTTP" décochée dans CF Admin sous Paramètres du serveur -> Paramètres. Vous devrez peut-être redémarrer votre serveur ColdFusion. Cela empêchera CF de définir tous les statuts sur 404 ou 500. Ajoutez ensuite une ligne ci-dessous à votre code serveur (modifiez-le en fonction de votre exception/code). Cela devrait vous donner 450 code d'état dans votre gestionnaire d'erreurs javascript.