У меня есть веб-сайт, на котором я выполняю вызов ajax следующим образом:
// perform an ajax request to generate a new subscriber account
jQuery.ajax({
type: 'POST',
url: '/index.php?option=com_content&view=article&id=45&tmpl=component',
data: postVars,
success: handleResponse,
error: function(jqXHR, textStatus, errorThrown) {
alert ('response: ' + jqXHR.responseText);
alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
}
});
Запрошенная страница ничего не делает, кроме как возвращает однозначный код состояния и он отлично работает со всеми браузерами, кроме IE9. Сценарий размещается в том же домене, что и запрашиваемая страница, поэтому проблем с кросс-доменным скриптингом быть не должно.
Я наконец отследил, что происходит, но не знаю, как это исправить. Оказалось, что запрос Ajax успешно завершается без проблем. Я проверил это, используя Fiddler для просмотра сетевого трафика. Сервер отвечает на запрос кодом состояния HTTP 200, а тело не отвечает. t содержат что-либо, кроме однозначного кода ответа. На этом этапе jQuery выполняет обработчик ошибок, а НЕ обработчик успеха s можно было бы ожидать (в IE9). Почему это происходит и как это предотвратить? Это происходит ТОЛЬКО в IE9. Даже IE8 и IE7 прекрасно работают с одним и тем же кодом! Как видите, я наконец прибег к обнаружению IE9 и использованию для этого объекта XmlHttpRequest (который, кстати, отлично работает).
Мне это кажется ошибкой jQuery, но я не могу найти упоминания об этом в мои поиски. Неужели я единственный, кто испытывает такое странное поведение?