有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    另一种选择,我使用的是将参数ajax=true添加到所有ajaxurl字符串中,并在我的操作中使用isAjax()方法进行测试

  2. # 2 楼答案

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

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

    您可以使用Firebug's Net module检查它是否存在。。。例如,当您对堆栈溢出进行投票时;)

    要从Struts2 Action中检查它,您需要实现ServletRequestAware接口,然后获取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();