2011-02-03 145 views
10

我在我的應用程序中使用JSF框架。我需要在階段偵聽器類的呈現響應階段之前運行特定的腳本。如何區分來自正常Http請求的Ajax請求?

運行此腳本的條件是,如果觸發的請求是需要運行腳本的Ajax請求,如果觸發的請求是Http請求,我不應該運行該腳本。

任何人都可以請幫我區分接收的請求。

+0

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

回答

17

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

4

Ajax請求將服務器變量X-Requested-With設置爲XMLHttpRequest。您可以使用該信息來區分ajax和普通請求。

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