Как определить, является ли запрос AJAX или обычный?

Я хочу обрабатывать ошибки по-разному для запросов AJAX против обычных запросов.

Как определить, является ли запрос AJAX или нет в действиях Struts2 ?

2 ответов


вы должны проверить, если заголовок запроса X-Requested-With существует и равен XMLHttpRequest.

обратите внимание, что не все запросы AJAX имеют этот заголовок, например Struts2 Dojo запросы не отправляют его; если вы вместо этого генерируете вызовы AJAX с Struts2-jQuery (или с любой другой новой структурой AJAX), он есть.

вы можете проверить, присутствует ли он, используя Firebug's Net module... например, когда вы голосуете за переполнение стека;)

чтобы проверить его внутри Struts2 Action, вы необходимо реализовать , потом 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 ко всем строкам url Ajax и тестирование в моем действии с помощью метода isAjax ().