gpt4 book ai didi

grails - 如何处理ajax请求中的grails异常?

转载 作者:行者123 更新时间:2023-12-02 03:21:32 26 4
gpt4 key购买 nike

如果我发出常规请求,我可以在 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)

然后我可以处理特定 Controller 中的错误并呈现我选择的 View ,例如

class ErrorController {

def index = {
render view: "/errors/myErrorPage", model: [code: params.code]
}
}

这工作得很好,每当服务器出现错误时,我都会收到错误页面。

现在我如何才能实现与 ajax 请求完全相同的行为?我正在使用 grails remoteFunction 发出 ajax 请求或formRemote 。每当服务器上发生异常时,我都想在 javascript 中执行相同的代码(例如,我想用alert('There was an exception') 显示警报)。

上述方法不适用于 ajax 请求。我仍然收到错误,即使错误中有 myErrorPage.gsp 的内容,它也没有打印到我用 formRemote 或 RemoteFunction 的更新参数指定的 html 元素中。

最佳答案

我终于找到了一个完全干净的解决方案,与用于处理标准请求的方法兼容。

您需要修改处理错误的操作,如下例所示:

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 请求中,您还需要通过将响应状态设置为 200 来告诉 grails 响应正常。

非常漂亮、干净。 :) 我很惊讶这无法在任何地方搜索到......

关于grails - 如何处理ajax请求中的grails异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com