How to determine whether a request is Ajax or Normal?

后端 未结 2 1000
别跟我提以往
别跟我提以往 2021-01-12 00:39

I want to handle errors differently for AJAX requests vs normal requests.

How do I identify whether a request is AJAX or not in Struts2 actions ?

相关标签:
2条回答
  • 2021-01-12 01:17

    The other alternative, which I use is to add the parameter ajax=true to all Ajax url strings and test in my action with an isAjax() method.

    0 讨论(0)
  • 2021-01-12 01:31

    You should check if the Request Header X-Requested-With is present and equals to XMLHttpRequest.

    Note that not all the AJAX requests have this header, for example Struts2 Dojo requests don't send it; if you instead are generating AJAX calls with Struts2-jQuery (or with any other new AJAX framework), it is there.

    You can check if it's present by using Firebug's Net module... for example, when you vote on Stack Overflow ;)

    To check it from within a Struts2 Action, you need to implement the ServletRequestAware interface, then get the Request and check if that particular header is there like this:

    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;
       }  
    }
    

    Note that you can obtain the request via ActionContext too, without implementing the ServletRequestAware interface, but it is not the recommended way:

    HttpServletRequest request = ServletActionContext.getRequest();
    
    0 讨论(0)
提交回复
热议问题