У меня есть сайт, на котором я вводил имя пользователя/пароль и нажимаю кнопку входа. Кнопка login делает объект XMLHttpRequest и запускает его.
В Chrome, Firefox, Opera, Safari, устройствах Android, устройствах iOS это прекрасно работает. IE9 будет работать, если я нахожусь на HTTP-адресе и не использую HTTPS.
В HTTPS IE9 ведет себя следующим образом:
Первый запрос на вход никогда ничего не возвращает. Экран F12 показывает мой запрос на вход на вкладке сети, и все выглядит правильно. Вкладка сценариев никогда не выдает ошибку. Просто ничего не происходит.
Здесь сумасшедшая часть: - Если я второй раз нахожу логин, он действительно работает. - Если я нажму обновить в браузере, а затем войдите в систему, это тоже сработает!
Я делаю запрос следующим образом:
var x = new XMLHttpRequest();
x.open("POST", "/Relative/URL/Path", true);
x.setRequestHeader("Content-Type", "text/plain");
x.onreadystatechange = function () {
if ((x.readyState == 4) && (x.status == 200)) {
// handle callback
}
}
x.send(my request);
Если это не удается, отладчик перейдет из строки x.send() в код onreadystatechange. ReadyState будет 1. Это будет последнее, что я могу отлаживать, потому что ничего не происходит.
Любые идеи будут чрезвычайно оценены.
[EDIT]: Я позволю одному из запросов пойти посмотреть, что произойдет. Событие onreadystatechange снова запущено с readyState = 4 и status = 12152. Сетевой вид на экране IE9 F12 показывает результат как "Отмена" и время, затраченное на 1589.07 секунд. В результате поиска в Google это означает, что соединение было закрыто на сервере.
[РЕДАКТИРОВАТЬ 2]: на основании комментария ниже я переустановил этот код, чтобы просто использовать метод jQuery ajax(). Я думал, что это может иметь шанс устранить плохой код с моей стороны. Нет такой удачи. Такое же поведение происходит.
$.ajax({
"url": sUrl,
"success": function (data, textStatus, x) {
workerCallback(data, id, "");
},
"error": function (x, testStatus, errorThrown) {
workerCallback("nc", id, errorThrown);
},
"contentType": "text/plain",
"data": JSON.stringify(req),
"dataType": "json",
"timeout": 1600000,
"type": "POST"
});
[ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:] Я обновил код. Если произойдет тайм-аут, я просто отправлю тот же запрос - только один раз. Довольно хак, но он работает. Если кто-либо не найдет решение, я разделить щедрость между несколькими полезными идеями, которые у людей были ниже.