Асинхронная загрузка jQuery в IE вызывает ошибку - но $ .ajax () по-прежнему работает - PullRequest
1 голос
/ 22 сентября 2011

Сценарий:

У меня есть некоторый код JS, я хочу определить, существует ли уже JQuery в DOM, если не добавить его:

if (typeof jQuery != 'function') {
    var sc = document.createElement('script');
    sc.type = 'text/javascript';
    sc.async = true;
    sc.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js";
    sc.onload = function() { App.getTrackers(); };
    sc.onreadystatechange = function() { App.getTrackers(); };

    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(sc, s);
}
else {
    App.getTrackers();
}

App = {
    getTrackers: function() {
        $.ajax({url: "/ajax.php", success: function(data) { console.log(data) }});
    }
}

onload () для FF+ Webkit;onReadyStateChange () для IE

Проблема с IE, я получаю эту ошибку:

'$' is undefined

Пока!Консоль IE возвращает содержимое ajax.php.Таким образом, функция jQuery была выполнена ... как-то.Хотя $ было не определено ...

Не существует ли еще $?Должен ли он быть скомпилирован, даже если скрипт был загружен?

1 Ответ

0 голосов
/ 22 сентября 2011

Состояние готовности имеет значения, отличные от complete, поэтому событие будет запускаться на разных этапах до загрузки и завершения кода.

Проверьте, какое состояние находится в обработчике события:

sc.onreadystatechange = function() {
  if (sc.readyState === 'complete') {
    App.getTrackers();
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...