Почему этот вызов jQuery Ajax терпит неудачу ТОЛЬКО в IE9 (даже отлично работает в IE8 и IE7) - PullRequest
10 голосов
/ 02 августа 2011

У меня есть веб-сайт, на котором я выполняю 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, и тело не содержит ничего, кроме кода ответа из одной цифры.В этот момент jQuery выполняет обработчик ошибок, а НЕ обработчик успеха, как и следовало ожидать (в IE9).Почему это происходит и как я могу предотвратить это?Это происходит ТОЛЬКО в IE9.Даже IE8 и IE7 прекрасно работают с одним и тем же кодом!Как вы можете видеть, я наконец-то прибег к обнаружению IE9 и использованию для этого объекта XmlHttpRequest (который, кстати, прекрасно работает).

Мне кажется, что это ошибка jQuery, но я не могу найти упоминанияоб этом в моих поисках.Я действительно единственный, кто испытывает это странное поведение?

Ответы [ 2 ]

7 голосов
/ 16 августа 2011

Ну, я наконец-то разыскал проблему.Оказывается, по какой-то причине jQuery / IE неправильно корректирует двойные кавычки.URL запроса был:

/ search.json? Callback = jQuery16105234487927080267_1313510362362 & q = акции ИЛИ "фондовый рынок" -blueprint -empireavenue.com -learn & _ = 1313510362469

в любом другом браузеревремя, когда jQuery выполнил запрос ajax, это выглядело так:

/ search.json? callback = jQuery16105234487927080267_1313510362362 & q = stocks% 20OR% 20% 22stock% 20market% 22% 20-blueprint% 20-blue-%= 1313510362469

, но по какой-либо причине во всех версиях IE все получилось так:

/ search.json? Callback = jQuery16105234487927080267_1313510362362 & q = stocks% 20OR% 20 "акции% 20market"% 20-blueprint% 20-empireavenue.com% 20-learn & _ = 1313510362469

, из-за которого сервер не возвращал данные.

1 голос
/ 03 августа 2011

Вы уверены, что вызываемый вами 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)
    }
});

Разверните функцию до ее основных частей, и выдолжен быть в состоянии увидеть, откуда исходит ошибка.

...