Как определить, является ли запрос 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 ().