如何区分Ajax请求和正常的Http请求?

时间:2011-02-03 12:03:37

标签: java javascript ajax jsf

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

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

有人可以帮我区分收到的请求吗?

3 个答案:

答案 0 :(得分:18)

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"));

答案 1 :(得分:4)

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

答案 2 :(得分:3)

private boolean isAjaxRequest() {
  PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext();
  return null != partialViewContext && partialViewContext.isAjaxRequest();
}