DWR 远程调用未设置 X-Requested-With 请求 header 值为 XMLHttpRequest
DWR remote calls not setting X-Requested-With request header with value XMLHttpRequest
我们正在使用 spring dwr 实现来执行 ajax 调用。来自 dwr_provider_xml 的片段看起来像...
<bean id="remoteClass"
class="x.y.z.RemoteImpl">
<dwr:remote javascript="AjaxSessionManager">
<dwr:include method="testMethod" />
</dwr:remote>
</bean>
Javascript 通话:
if ( AjaxSessionManager != undefined ) {
AjaxSessionManager.testMethod();
}
我们在服务器端有一些通用代码来检查此调用是否是 ajax 调用并执行一些额外的步骤。
private static final String XMLHTTPREQ = "XMLHttpRequest";
public static boolean isAjaxCall(HttpServletRequest request) {
return XMLHTTPREQ
.equals(request.getHeader("X-Requested-With"));
}
但是此方法永远不会返回 true,当我通过 Fiddler 进行跟踪时,请求 header 没有被发送。我相信 jQuery, dojo 和其他流行的框架默认设置了这个。我们是否必须明确地为 DWR 定义一些东西?感谢任何帮助。
我找到了解决办法。 DWR 提供了一个要传递的 headers 选项,所以我的方法调用现在看起来像这样...
AjaxSessionManager.testMethod({callback:{},
headers: {'X-Requested-With':'XMLHttpRequest'}
);
我们正在使用 spring dwr 实现来执行 ajax 调用。来自 dwr_provider_xml 的片段看起来像...
<bean id="remoteClass"
class="x.y.z.RemoteImpl">
<dwr:remote javascript="AjaxSessionManager">
<dwr:include method="testMethod" />
</dwr:remote>
</bean>
Javascript 通话:
if ( AjaxSessionManager != undefined ) {
AjaxSessionManager.testMethod();
}
我们在服务器端有一些通用代码来检查此调用是否是 ajax 调用并执行一些额外的步骤。
private static final String XMLHTTPREQ = "XMLHttpRequest";
public static boolean isAjaxCall(HttpServletRequest request) {
return XMLHTTPREQ
.equals(request.getHeader("X-Requested-With"));
}
但是此方法永远不会返回 true,当我通过 Fiddler 进行跟踪时,请求 header 没有被发送。我相信 jQuery, dojo 和其他流行的框架默认设置了这个。我们是否必须明确地为 DWR 定义一些东西?感谢任何帮助。
我找到了解决办法。 DWR 提供了一个要传递的 headers 选项,所以我的方法调用现在看起来像这样...
AjaxSessionManager.testMethod({callback:{},
headers: {'X-Requested-With':'XMLHttpRequest'}
);