Это репост следующего вопроса SO, потому что я полностью убежден, что это проблема сети / сервера, а не что-то не так с моим кодом.
https://stackoverflow.com/questions/7842530/ie-9-30-second-ajax-post-requests
Вот суть: при выполнении запроса AJAX в IE9 (и в режимах совместимости 7/8) через GET или POST происходят следующие события:
В течение 500 мс мой сервер отвечает (Rails / Apache / Phusion Passenger)
IE сразу видит тело ответа (как показано на вкладке "Сеть инструментов разработчика")
Затем IE ждет, пока не пройдет период тайм-аута, прежде чем он покажет заголовки (снова в инструментах разработчика) и уведомляет мой Javascript.
Как указано в вопросе SO, похоже, что мой сервер (или, возможно, сетевой уровень в Windows 7) не закрывает запрос, пока не пройдет период тайм-аута.
Он отлично работает во всех других браузерах, которые я тестировал. Кто-нибудь знает, почему это может происходить?
Хорошо, после долгих экспериментов я обнаружил, что отправка запроса AJAX GET через несколько сотен миллисекунд после POST, похоже, решает проблему. Не уверен, почему, но похоже, что оно сначала закрывает предыдущее соединение и позволяет ему завершиться.
Итак, мое решение таково:
didSend: function(request, response) {
if (SC.browser.msie && request.get('type') === "POST") {
setTimeout(function() {
Core360.Request.getUrl('/test_server').send();
}, 500);
}
}
И вроде все работает. Мне все равно хотелось бы выяснить настоящую проблему, но, поскольку объект XMLHttpRequest по какой-то глупой причине ждет вызова readystatechanged ...