如何确定请求是Ajax还是Normal?
我想以不同的方式处理AJAX请求与正常请求的错误。
如何在Struts2操作中识别请求是否为AJAX?
您应该检查请求标头X-Requested-With
是否存在并且等于XMLHttpRequest
。
请注意,并非所有AJAX请求都有此标头,例如Struts2 Dojo
请求不发送它; 如果您使用Struts2-jQuery
(或任何其他新的AJAX框架)生成AJAX调用,它就在那里。
您可以使用Firebug's Net module
检查它是否存在…例如,当您对Stack Overflow投票时;)
要从Struts2 Action
检查它,您需要实现ServletRequestAware
接口,然后获取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接口,但这不是推荐的方式:
HttpServletRequest request = ServletActionContext.getRequest();
另一种选择,我使用的是将参数ajax = true添加到所有Ajax url字符串中,并使用isAjax()方法在我的操作中进行测试。
- Spring MVC:在进行AJAX调用后在对话框中显示数据
- 每个Ajax调用的Javascript(之前和之后)
- 从Spring Service使用AJAX GET下载文件
- 如何使用struts2提交标签作为按钮而不提交表格?
- HtmlUnit无法获取IFRAME添加的js / ajax
- JSF和f:用于隐藏/显示div的ajax
- 使用application / json contentType的AJAX POST调用获取“no’Access-Control-Allow-Origin’标头”错误
- JSF2.0 – 使用Primefaces 3.0处理错误的Ajax调用
- 如何将Javaexception信息返回给jQuery.ajax REST调用?