java - 如何判断一个请求是Ajax还是Normal?

标签 java ajax struts2 http-headers struts-action

我想以不同方式处理 AJAX 请求和普通请求的错误。

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

最佳答案

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

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

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

要从 Struts2 Action 中检查它,您需要实现 ServletRequestAware 接口(interface),然后获取 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 接口(interface),但这不是推荐的方式:

HttpServletRequest request = ServletActionContext.getRequest();

关于java - 如何判断一个请求是Ajax还是Normal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621539/

相关文章:

java - Struts2 ActionSupport getTexts() 不起作用

java - 在 hibernate 中注释派生数据库列

java - 多个映射到 Spring 中 Controller 的相同方法

java - 当开发模式为 true 时,提交表单后服务器控制台中的参数拦截器错误

javascript - 引用错误: _spPageContextInfo is not defined

ajax - Liftweb : create a form that can be submitted both traditionally and with AJAX

javascript - 弹出图像并从现有 img 中查看大图

Java 将字段反射分配为 null 导致 IllegaArgumentException

java - 在 Java 中向 Rally 添加新用户

javascript - ajax后加载外部javascript