【问题标题】:How to differentiate Ajax requests from normal Http requests?如何区分 Ajax 请求和普通 Http 请求?
【发布时间】:2011-06-20 15:07:42
【问题描述】:

我在我的应用程序中使用 JSF 框架。我需要在我的 Phase Listener 类中的渲染响应阶段之前运行特定的脚本。

运行此脚本的条件是,如果触发的请求是 Ajax 请求我需要运行脚本,如果触发的请求是 Http 请求我不应该运行该脚本。

谁能帮我区分收到的请求吗?

【问题讨论】:

标签: java javascript ajax jsf


【解决方案1】:
private boolean isAjaxRequest() {
  PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext();
  return null != partialViewContext && partialViewContext.isAjaxRequest();
}

【讨论】:

    【解决方案2】:

    Ajax 请求通常有一个X-Requested-With: XMLHttpRequest 请求标头。在JSF中,可以通过ExternalContext#getRequestHeaderMap()获取请求头。

    ExternalContext externalContext = facesContext.getExternalContext();
    Map<String, String> headers = externalContext.getRequestHeaderMap();
    boolean ajax = "XMLHttpRequest".equals(headers.get("X-Requested-With"));
    

    【讨论】:

    • 如果您使用的是射频,那么request.getParameter("AJAXREQUEST")==null 也可以使用
    • 是的,您还可以挂钩特定于实现/库的参数/属性,但这会将您的代码紧密耦合到特定的实现/库。
    • ajax 请求来自哪里? JSF? JS库?国产的?无论如何,只需确定请求标头,看看是否有可行的键/值对在普通请求和 ajax 请求之间有所不同。请System.out.println(headers); 看到他们。
    【解决方案3】:

    Ajax 请求将服务器变量 X-Requested-With 设置为 XMLHttpRequest。您可以使用该信息来区分 ajax 和普通请求。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2012-04-14
      • 1970-01-01
      • 2013-02-08
      相关资源
      最近更新 更多