我正在开发基于 Spring MVC 的 webapp。
以下是我的环境详细信息:-
Java 1.8.0_162 (64 bit)
, Spring 4.3.1
, Apache Tomcat 8.0.49
,Waffle-1.8.3
用于 SSOjquery-1.11.3
和Google Charts API
.
已将以下 JavaScript 代码放在常见的 JS 文件之一中:-
$.ajaxSetup({ cache: false });
向服务器发出的 jQuery AJAXPOST
请求在Mozilla和Chrome浏览器中完美运行。但是对于IE 11浏览器,jQuery AJAXPOST
请求只有在第一次加载窗口时才能正常工作。然后随机失败,一旦失败,后续请求也会失败。
以下是IE 11浏览器的网络选项卡的快照:-
两个请求在各自的请求正文中都有 JSON 对象。但是,成功请求的Content-Length
属性值为416(字符串化 JSON 对象的总字符数),失败请求的属性值为0。对于随机失败POST
的请求和后续请求,Content-Length
始终为0,但计算出的 JSON 对象始终存在于请求正文中。在每个请求中,JSON 对象都是动态构建的。
UPDATE-1 (26March2018)以下是文件Waffle
中定义的 AD 身份验证配置web.xml
:-
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
<init-param>
<param-name>principalFormat</param-name>
<param-value>fqn</param-value>
</init-param>
<init-param>
<param-name>roleFormat</param-name>
<param-value>both</param-value>
</init-param>
<init-param>
<param-name>allowGuestLogin</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>securityFilterProviders</param-name>
<param-value>
waffle.servlet.spi.NegotiateSecurityFilterProvider
</param-value>
</init-param>
<init-param>
<param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
<param-value>
Negotiate
NTLM
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/welcome.do</url-pattern>
</filter-mapping>
只有1 个URL 即/welcome.do
(加载 webapp 的初始 URL)被配置为调用 SSO 身份验证。
以下是触发 AJAX 请求的 JavaScript 代码:-
function getData() {
let dashboardFilterParams=new DashboardFilterParams(<passing the arguments to this constructor>);
//alert(JSON.stringify(dashboardFilterParams));
//console.dir(dashboardFilterParams);
$.ajax({
url: str_THIS_WA_URL+"/xyz/abcdXYZ.do?httpReqType=ajaxReq",
data: JSON.stringify(dashboardFilterParams),
dataType: "json",
contentType: "application/json",
mimeType: "application/json",
type: "POST",
success:function(responseData){
if(responseData && "success"===responseData.reqResult) {
//populating tables & drawing charts using Google Charts JS API if successfully fetched the data
} else {
//showing error message
}
},
error:function(data,status,er) {
showTheMessage("danger","Error getting data");
console.log("error: "+JSON.stringify(data)+"\n status: "+status+"\n er:"+er);
}
});
}
IE 11版本详情:
此外,我正在使用Google Charts API在页面上呈现图表。请求被触发到 Google Charts API 服务器。这对IE浏览器有影响吗?
使它在IE 11浏览器中工作的解决方案是什么?
Federico klez Culloca在评论部分的问题的答案:
请求(客户端)端没有错误。但来自服务器的响应说
The request sent by the client was syntactically incorrect
。和响应头Response HTTP/1.1 400 Bad Request
。请求正文内容绝对没有区别。
指向与 webapp 相同的
str_THIS_WA_URL variable
域,即 AJAX 请求在当前域内。
将时间戳(根据shawn在下面评论部分中的建议)添加到 URL 并没有解决问题。