Как получить сообщение об ошибке из обратного вызова AJAX в Grails? - PullRequest
0 голосов
/ 06 августа 2010

Я отправляю следующий запрос 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.Вместо этого я получил HTML-страницу ошибки, сгенерированную из Tomcat / Apache (или Grails?), Которая выглядит следующим образом:

<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>

Как я могу обойти сгенерированную страницу ошибки HTML, чтобы извлечь из кода JavaScript сообщение«Вы должны подождать ...»?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 августа 2010

Вы устанавливаете ошибку состояния HTTP, но на самом деле вы обнаруживаете проблему бизнес-логики - ошибку приложения.Почему бы просто не установить соответствующий код состояния и сообщение уровня приложения (вашего собственного дизайна) и вернуть их в ответе ajax (включая оставшееся время)?Если вы полагаетесь на коды ошибок HTTP, вы можете получить разные результаты в разных браузерах, некоторые из которых перехватывают сообщение об ошибке, если страница ошибки меньше 512 байт.

В случае, когда вы цитируете, Apache не находит ни одного известного сообщения об ошибке, соответствующего 419.

Вы можете добавить его в свою .htaccess конфигурацию:

ErrorDocument 419 /errordocs/419.html

...и затем заставьте эту страницу 419.html сказать что угодно (и убедитесь, что страница превышает 512 байт).Но держу пари, что работа с кодами состояния уровня приложения - это то, что вы ищете.

...