0

次の AJAX リクエストを送信しています。

$.ajax({ type: 'POST',
  data: $(this).parents('form:first').serialize(), url:'/myapp/comment/saveOrUpdate',
  success: function(data,textStatus) {insertNewComment(data)},
  error: function(xhr, textStatus, errorThrown) {alert(xhr.responseText);}
})

...そして私のコントローラーアクションは次のようになります:

class CommentController {
...
def saveOrUpdate = {
   ...
   if (error) {
      response.sendError 419, 'You must wait at least 5 minutes before posting a new comment'
   }
}}

残念ながら、HTTP 応答で送信したメッセージが表示されません。代わりに、Tomcat/Apache (または Grails?) から次のようなエラー HTML ページが生成されました。

<html><head><title>Apache Tomcat/6.0-snapshot - Error report</title>
</head><body><h1>HTTP Status 419 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Cannot find message associated with key http.419</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/6.0-snapshot</h3></body></html>

JavaScript コードから「お待ちください...」というメッセージを取得するために、生成されたエラー HTML ページをバイパスするにはどうすればよいですか?

ご協力ありがとうございました。

4

1 に答える 1

0

HTTPステータスエラーを設定していますが、実際にはビジネスロジックの問題(アプリケーションエラー)が発生しています。適切なアプリケーションレベルのステータスコードとメッセージ(独自の設計)を設定し、それらをajax応答(残り時間を含む)で返すのはなぜですか?HTTPエラーコードに依存している場合、ブラウザによって結果が異なる可能性があります。エラーページが512バイト未満の場合、エラーメッセージを乗っ取るものもあります。

引用した場合、Apacheは419に一致する既知のエラーメッセージを検出しません。

構成に1つ追加できます.htaccess

ErrorDocument 419 /errordocs/419.html

...そして、その419.htmlページに好きなように言わせます(そしてページが512バイトを超えていることを確認します)。しかし、私はあなたが探しているのはアプリケーションレベルのステータスコードで作業することだと思います。

于 2010-08-05T22:12:18.073 に答える