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

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

问题描述:

我在我的应用程序中使用JSF框架。我需要在阶段侦听器类的呈现响应阶段之前运行特定的脚本。如何区分来自正常Http请求的Ajax请求?

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

任何人都可以请帮我区分接收的请求。

+0

可能会感兴趣:http://*.com/questions/216173/differentiating-between-an-ajax-call-browser-request – SuperSaiyan 2011-02-03 12:14:47

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

如果您使用的RF然后`的request.getParameter (“AJAXREQUEST”)== null`也可以工作 – 2011-02-03 12:10:08

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

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