Java 为什么IE 11浏览器对jQuery AJAX POST请求的内容长度随机为0?
我正在开发基于SpringMVC的webapp 以下是我的环境详细信息:-Java 为什么IE 11浏览器对jQuery AJAX POST请求的内容长度随机为0?,java,jquery,ajax,internet-explorer-11,waffle,Java,Jquery,Ajax,Internet Explorer 11,Waffle,我正在开发基于SpringMVC的webapp 以下是我的环境详细信息:- Java1.8.0\u162(64位),Spring4.3.1,ApacheTomcat8.0.49,Waffle-1.8.3用于SSO,jquery-1.11.3和GoogleCharts API 已将以下JavaScript代码放入其中一个常见JS文件中:- $.ajaxSetup({cache:false}) jQuery AJAXPOST向服务器发出的请求在Mozilla和Chrome浏览器中完美地工作。 但是对
Java1.8.0\u162(64位)
,Spring4.3.1
,ApacheTomcat8.0.49
,Waffle-1.8.3
用于SSO,jquery-1.11.3
和GoogleCharts API
已将以下JavaScript代码放入其中一个常见JS文件中:-
$.ajaxSetup({cache:false})代码>
jQuery AJAXPOST
向服务器发出的请求在Mozilla和Chrome浏览器中完美地工作。
但是对于IE11浏览器,jQueryAjaxPOST
请求只有在第一次加载窗口时才能正常工作。
然后随机失败&一旦失败,后续请求也会失败
以下是IE 11浏览器的网络选项卡的快照:-
成功ajaxPOST
请求:
失败ajaxPOST
请求:
两个请求在各自的请求体中都有JSON对象。
但是,对于成功的请求,Content-Length
属性值为416(字符串化JSON对象的总字符数),对于失败的请求,0。
对于随机失败的POST
请求和后续请求,内容长度始终0,但计算的JSON对象始终存在于请求正文中。
在每个请求中,JSON对象都是动态构建的
UPDATE-1(2018年3月26日)以下是web.xml
文件中定义的Waffle
AD身份验证配置:-
<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>
IE 11版本详细信息:
另外,我正在使用谷歌图表API在页面上呈现图表。请求被发送到GoogleCharts API服务器。这在IE浏览器中是否有效
使其在IE 11浏览器中工作的解决方案是什么
对Federico klez Culloca在评论部分提出的问题的回答:
请求(客户端)端没有错误。但是来自服务器的响应说,客户端发送的请求在语法上不正确
。以及响应头响应HTTP/1.1 400错误请求
请求正文内容绝对没有区别
str_THIS_WA_URL变量
指向与webapp相同的域,即AJAX请求位于当前域中
将时间戳(shawn在下面的评论部分中的建议)添加到URL并没有解决问题。IE将此作为一种优化,因为它希望服务器使用HTTP/401凭据质询进行响应,并且两次传输正文将是一种浪费
在您的情况下,由于/welcome.do
由NTLM保护,IE现在假定/
和下面的所有内容都是安全保护空间的一部分,因此将无车身后优化应用于所有内容
解决方法是将/welcome.do
移动到/secured/welcome.do
并确保/secured
下没有不安全的资源
此处有更多详细信息:。后端有任何错误/异常吗?请检查请求正文,看看这两个调用之间是否有差异。另外,如果可能,请显示执行实际请求的代码。我刚刚注意到您的应用程序正在从不同的域请求数据。你检查过了吗?你读过描述相同症状的书吗?你会引发这种情况吗?大约两年前我因为这个问题头疼。。。一些答案对我有帮助
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);
}
});
}