Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to determine whether a request is Ajax or Normal?

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 ?

like image 765
Amol Ghotankar Avatar asked Jan 31 '13 08:01

Amol Ghotankar


2 Answers

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();
like image 200
Andrea Ligios Avatar answered Nov 08 '22 07:11

Andrea Ligios


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.

like image 22
user497087 Avatar answered Nov 08 '22 08:11

user497087