Я работаю над веб-сервером Spring MVC.
Ниже приведены сведения о моей среде: - Java 1.8.0_162 (64 bit)
, Spring 4.3.1
, Apache Tomcat 8.0.49
, Waffle-1.8.3
для SSO, jquery-1.11.3
и Google Charts API
.
Поместите следующий код JavaScript в один из общих файлов JS: - $.ajaxSetup({ cache: false });
Запросы JQuery AJAX POST
сделанные на сервере, безупречно работают в браузерах Mozilla и Chrome. Но когда дело доходит до браузера IE 11, запросы JQuery AJAX POST
работают без сбоев только тогда, когда окно загружается в первый раз. Затем сбой случайным образом и один раз проваливаются, последующие запросы также терпят неудачу.
Ниже приведены снимки вкладки " Сеть " браузера 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
(исходный URL-адрес, который загружает веб-приложение), настроен для вызова аутентификации SSO.
Ниже приведен код JavaScript, который запускает запросы AJAX:
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:
Кроме того, я использую API графиков Google для отображения диаграмм на странице. Для которых запросы отправляются на сервер API графиков Google. Этот эффект в браузере IE?
Каково решение заставить его работать в браузере IE 11?
Ответы на вопросы Federico klez Culloca в разделе комментариев:
-
Нет ошибки на стороне запроса (клиента). Но ответ с сервера говорит, что
The request sent by the client was syntactically incorrect
. и ответные заголовкиResponse HTTP/1.1 400 Bad Request
. -
Абсолютной разницы в содержании тела запроса нет.
-
str_THIS_WA_URL variable
указывает на тот же домен, что и webapp, т.е. Запросы AJAX находятся в текущем домене.
Добавление метки времени (по предложению shawn в разделе комментариев ниже) к URL-адресу не решило проблему.