Почему этот вызов jQuery Ajax терпит неудачу ТОЛЬКО в IE9 (даже отлично работает в IE8 и IE7)
У меня есть сайт, на котором я делаю вызов 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. script размещен в том же домене, что и запрашиваемая страница, поэтому не должно быть проблем с междоменным скриптом.
Наконец-то я выяснил, что происходит, но я не знаю, как это исправить. Оказывается, что запрос Ajax успешно завершается без проблем. Я проверил это, используя Fiddler, чтобы посмотреть сетевой трафик. Сервер отвечает на запрос кодом HTTP-статуса 200, а тело не содержит ничего, кроме кода ответа с одной цифрой. На этом этапе jQuery выполняет обработчик ошибок, а не обработчик успеха, как и ожидалось (в IE9). Почему это так и как я могу предотвратить это? Это ТОЛЬКО происходит в IE9. Даже IE8 и IE7 работают отлично с одним и тем же кодом! Как вы можете видеть, я, наконец, прибегнул к обнаружению IE9 и с помощью объекта XmlHttpRequest, чтобы сделать это (что прекрасно работает, кстати).
Это похоже на ошибку jQuery, но я не могу найти упоминания об этом в моих поисках. Я действительно единственный, кто испытывает это странное поведение?
Ответы
Ответ 1
Ну, наконец, я выяснил проблему. Оказывается, по какой-то причине jQuery/IE не правильно urlencode двойные кавычки. URL-адрес запроса:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks ИЛИ "фондовый рынок" -blueprint -empireavenue.com -learn & _ = 1313510362469
В каждом другом браузере к тому времени, когда jQuery выполнил запрос ajax, он выглядел так:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20%22stock%20market%22%20-blueprint%20-empireavenue.com%20-learn& _ = 1313510362469
но по какой-либо причине во всех версиях IE это выглядело следующим образом:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20 "запас %20market" %20-план %20-empireavenue.com %20-узнать & _ = 1313510362469
что заставило сервер не возвращать данные.
Ответ 2
Вы уверены, что URL-адрес, который вы вызываете (/index.php?option=com_content&view=article&id=45&tmpl=component
), работает в IE9? Если вы загружаете эту страницу PHP в IE9, возвращает ли она ожидаемый результат? Он должен это сделать, но стоит проверить, что ошибка находится в вызове jQuery, а не в PHP.
Кроме того, вызов POST обычно относится к такой странице, как index.php, с строкой запроса (option=com_content
, view=article
и т.д.), отправленной как переменная postVars
.
Попробуйте использовать следующее:
$.ajax({
type: "POST",
url: "index.php",
data: {
option : com_content,
view : article,
id : 45,
tmpl : component
},
success: function(msg){
console.log(msg);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus)
}
});
Сбросьте функцию на ее основные части, и вы сможете увидеть, откуда исходит ошибка.