如果我发出常规请求,我可以在UrlMappings.groovy中定义错误和异常的处理,如下例所示:
"403"(controller: 'error', action: 'index', params:['code':'403'])
"404"(controller: 'error', action: 'index', params:['code':'404'])
"500"(controller: 'error', action: 'index', params:['code':'500'])
"500"(controller: 'home', action: 'noPrivileges', exception: IllegalOperationException)
然后我可以处理特定控制器中的错误并呈现我选择的视图,例如
class ErrorController {
def index = {
render view: "/errors/myErrorPage", model: [code: params.code]
}
}
这非常有效,每当服务器出现错误时,我都会收到错误页面。
现在我怎样才能为ajax请求实现完全相同的行为?我正在使用grails remoteFunction或formRemote制作ajax请求。每次在服务器上发生异常时,我都希望在javascript中执行相同的代码(例如,我想显示带警报的警报('有异常')。)
上述方法不适用于ajax请求。我仍然收到错误,即使错误中有myErrorPage.gsp的内容,它也不会打印到我使用formRemote或remoteFunction的update参数指定的html元素中。
答案 0 :(得分:6)
我终于找到了一种完全干净的解决方案,与用于处理标准请求的方法兼容。
您需要修改处理错误的操作,如以下示例所示:
class ErrorController {
def index = {
if (request.xhr) {
response.status = 200
render template: "/errors/myAjaxErrorTemplate", model: [code: params.code]
} else {
render view: "/errors/myErrorPage", model: [code: params.code]
}
}
}
使用request.xhr,您可以区分ajax请求和标准请求。在ajax请求中,您还需要告诉grails,将响应状态设置为200,响应正常。
非常干净整洁。 :)我很惊讶这不能用Google搜索...
答案 1 :(得分:1)
remoteFunction
会触发几个事件onFailure
和on_ERROR_CODE
。您可以使用该事件来显示警告消息。
您可以在docs
中查看更多详情答案 2 :(得分:0)
如果请求状态设置正确,您可以通过onFailure
/ remoteFunction
的{{1}}属性定义JavaScript函数。
在此功能中,您可以在客户端处理异常。
使用文档中的示例,它可能如下所示:
formRemote