我想以不同方式处理 AJAX 请求和普通请求的错误。
如何在 Struts2 操作中识别请求是否为 AJAX?
最佳答案
您应该检查请求 header X-Requested-With
是否存在并且等于 XMLHttpRequest
。
请注意,并非所有 AJAX 请求都有此 header ,例如 Struts2 Dojo
请求不会发送它;如果您改为使用 Struts2-jQuery
(或任何其他新的 AJAX 框架)生成 AJAX 调用,它就在那里。
您可以使用 Firebug 的 Net 模块
来检查它是否存在...例如,当您对 Stack Overflow 投票时 ;)
要从 Struts2 Action
中检查它,您需要实现 ServletRequestAware
接口(interface),然后获取 Request
并检查是否特定标题是这样的:
public class MyAction extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletRequest getRequest() {
return this.request;
}
public String execute() throws Exception{
boolean ajax = "XMLHttpRequest".equals(
getRequest().getHeader("X-Requested-With"));
if (ajax)
log.debug("This is an AJAX request");
else
log.debug("This is an ordinary request");
return SUCCESS;
}
}
请注意,您也可以通过 ActionContext 获取请求,而无需实现 ServletRequestAware 接口(interface),但这不是推荐的方式:
HttpServletRequest request = ServletActionContext.getRequest();
关于java - 如何判断一个请求是Ajax还是Normal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621539/