jQuery AJAX-запросы не выполняются в IE8 с сообщением «Ошибка: этот метод нельзя вызвать, пока не будет вызван метод open». - PullRequest
6 голосов
/ 29 декабря 2010

Я использую jQuery 1.4.2 и пытаюсь выполнить простой AJAX-запрос.Целевой URL возвращает строку JSON (я проверил ее с помощью jslint).Запрос работает в Firefox и Chrome, но не хочет работать в IE8, и я не могу определить, почему.Вот вызов:

jQuery.ajax({
url: 'http://' + domain + '/' + 'helper/echo/',
dataType: 'json',
success: function(data) {
 alert(data);
},
beforeSend: function(request, settings) {
 alert('Beginning ' + settings.dataType + ' request: ' + settings.url);
},
complete: function(request, status) {
 alert('Request complete: ' + status);
},
error: function(request, status, error) {
 alert(error);
}
});

IE выполнит обратный вызов beforeSend и обратный вызов ошибки.Обратный вызов об ошибке выдает сообщение:

Error: This method cannot be called until the open method has been called.

Мой заголовок ответа возвращается с Content-Type: text/javascript; charset=UTF-8.

Что происходит с IE?Я запускаю сервер на локальном хосте, делаю запрос от http://localhost:8080/psx до http://localhost:8080/helper. Может быть, IE блокирует этот запрос?Я попытался установить Fiddler для анализа трафика запросов, но он не запускается на моей машине, потому что он довольно заблокирован.Firebug позволяет мне, но там все вроде хорошо.

Спасибо за помощь !!!

1 Ответ

14 голосов
/ 30 декабря 2010

Хорошо, вот исправление!В запросе использовался window.XMLHttpRequest(), который по какой-то причине не работает должным образом в IE8.jQuery не возвращается к window.ActiveXObject("Microsoft.XMLHTTP"), как следует.

Добавьте это в свой скрипт где-то перед вызовом AJAX (проверено только в IE8, но не в других IE):

jQuery.ajaxSetup({
            xhr: function() {
                    //return new window.XMLHttpRequest();
                    try{
                        if(window.ActiveXObject)
                            return new window.ActiveXObject("Microsoft.XMLHTTP");
                    } catch(e) { }

                    return new window.XMLHttpRequest();
                }
        });

как я пришел к решению:

  1. Обновлен до jQuery 1.4.4 в случае, если проблема была исправлена ​​ошибка.
  2. Пошаговый отладчик Firebug и DevTools до результатовказалось, что он сильно отличается.
  3. В строке 5899 функция ajax () создает объект XmlHttpRequest с функцией xhr ().В Firefox он возвращал хорошие данные.В IE это возвращалось со всеми полями Error: This method cannot be called until the open method has been called.
  4. Я проанализировал эту функцию в строке 5749, return new window.XMLHttpRequest();
  5. Я гуглил и наткнулся на эту страницу , котораяимеет ту же проблему и предложил решение, которое работает для меня.
  6. Официальный билет jQuery :
...