如何区分 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请求还是普通请求