2016-09-14 17 views
-1

この質問の続きjQuery Ajax error handling, show custom exception messagesフォームが送信されたにもかかわらずエラーが発生した場合、ColdFusionからのカスタムエラーメッセージ(AJAX経由)をユーザーに表示しようとしています。 ColdFusionの生産では、jQuery Ajaxエラー報告とColdFusion

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

しかし:

は、私はjQueryのに戻って、このようなようなエラーを表示ので、その簡単な200ではない応答ステータスコードを返すことになる標準<cfthrow errorcode="500" message="You did something wrong"/>を使用してこれを実行しようとしていますサーバーでは、デバッグ設定でエラー報告を無効にすることをお勧めします。だから今私のユーザーはすべてカスタムメッセージの代わりに​​と見る。

ここで私の暫定的な解決策は、<cfreturn "Error: You did something wrong"/> <cfabort>を実行してから、「Error:」で始まるテキストがあるサーバーから返された結果をjQueryで探しさせることです。

<cfthrow>で適切な例外処理を使用することになります。デバッグをオフにすることを推奨すると、これはどのように達成できますか?

+1

レスポンスはJSONパケットですか?その場合は、JSONに 'success'プロパティおよび/または' error'メッセージを含めて、クライアント側でレスポンスを受け取ったときにそれらの値をチェックしてください。 –

+0

これはajax呼び出しの 'success()'メソッドで常に処理されます。これはColdFusionから返された結果で 'Error:'の文字列を探しています。 successメソッドのエラーを処理するのは間違っているようです。 –

+0

SEOを含むいくつかの理由から間違っています。ページが200回成功した場合、ページの応答がエラーであることを検索クローラーに知らせるものはありません。 –

答えて

-1

<cfthrow> errorCodeはHTTPステータスコードの応答ではありません。キャッチされていないエラーをスローした場合、デフォルトでは、<cfthrow>のエラーコードに関係なく、500 HTTPステータスコードで応答します。この場合、jquery.ajax().error()メソッドを使用して、ユーザーにメッセージを表示したいとします。多くの場合、意図的にエラーを投げるのを避け、500個のステータスコードヘッダーを含めることが望ましいでしょう。あなたの質問に示されているように、returnには、$.ajax().success()で条件付きで処理される値を使用できます。

+0

はい、問題は、エラーメッセージが本番サーバーのColdFusion管理者でオフになっているためエラーメッセージを表示できないということです。つまり、私のジレンマ/質問です。 –

+0

サーバーからクライアントにエラーを戻す場合は、エラーをキャッチしてエラーを戻すか、error.messageだけを戻す必要があります。 CFがjavascriptに例外情報を与えることについて自然なことは何もありません。通常、運用システムで例外情報がオフになる理由があります。 –

1

同様の問題がありました。これを試してみてください:まず、CF Adminの「サーバの設定」 - >「設定」で「HTTPステータスコードを有効にする」チェックボックスをオフにします。 ColdFusionサーバーを再起動する必要があります。これにより、CFがすべてのステータスを404または500に設定できなくなります。次に、サーバーコードに下の行を追加します(例外/コードに従って変更してください)。

<cfthrow type="Authentication" errorcode="450" message="this is message"> 

これは、JavaScriptのエラーハンドラに450のステータスコードを与えるはずです。