如何确定请求是Ajax还是Normal?

Amo*_*kar 7 java ajax struts2 http-headers struts-action

我想以不同的方式处理AJAX请求与正常请求的错误.

如何在Struts2操作中识别请求是否为AJAX?

And*_*ios 23

您应该检查请求标头X-Requested-With是否存在并且等于XMLHttpRequest.

请注意,并非所有AJAX请求都有此标头,例如Struts2 Dojo请求不发送它; 如果您使用Struts2-jQuery(或使用任何其他新的AJAX框架)生成AJAX调用,它就在那里.

您可以使用Firebug's Net module... 来检查它是否存在,例如,当您对Stack Overflow投票时;)

要从a中检查它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;
   }  
}
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以通过ActionContext获取请求,而无需实现ServletRequestAware接口,但这不是推荐的方式:

HttpServletRequest request = ServletActionContext.getRequest();
Run Code Online (Sandbox Code Playgroud)

  • @AndreaLigios,nope,工作得很漂亮.我只有笑话. (2认同)