如何区分 Ajax 请求和普通 Http 请求?

Posted

技术标签:

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

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

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

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

【问题讨论】:

可能感兴趣:***.com/questions/216173/… 【参考方案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 和普通请求。

【讨论】:

以上是关于如何区分 Ajax 请求和普通 Http 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何区分php(或codeigniter)中的ajax调用和浏览器请求?

x-requested-with 请求头 区分ajax请求还是普通请求

区分 HTTP 请求和 Ajax 请求

如何判断一个请求为ajax请求?

使用 Express 检测 NodeJS 上的 AJAX 请求

基础:ASP.NET使用原始AJAX