JavaScript скрипт динамической загрузки скрипта IE6 проблема - PullRequest
0 голосов
/ 12 февраля 2010

Я использую собственную библиотеку для репликации вызовов jsonp. Прежде чем вы, ребята, попросите меня использовать JQuery или другие библиотеки, позвольте мне сказать, что я не могу использовать его из-за некоторых ограничений.

Ниже приведен код, используемый для запроса: </p> <pre> BurrpJsonAjaxRequest.prototype.send = function() { this.script = document.createElement("script"); this.script.type = "text/javascript"; this.script.charset = "UTF-8"; this.script.src = this.URL; if (typeof(this.callBack) == "function") { this.script.callback = this.callBack; } var currRequest = this; //sleep(100); if (this.script.src.readyState) { //IE this.script.src.onreadystatechange = function() { if (this.script.src.readyState == "loaded" || this.script.src.readyState == "complete") { this.script.src.onreadystatechange = null; currRequest.hideLoading(); currRequest.callback(); } }; } else { //Others this.script.src.onload = function() { currRequest.hideLoading(); currRequest.callback(); }; } this.docHead.appendChild(this.script); }; </pre> <p>

Это работает при первом запуске. При последующих выполнениях выполняется запрос, но обратный вызов не выполняется.

Если я использую метод сна (прокомментированный в коде), как показано ниже, обратный вызов также выполняется при последующих вызовах. </p> <pre> function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i milliseconds){ break; } } } </pre> <p>

Как сон влияет на выполнение обратного вызова? Работает нормально в Firefox, хотя.

1 Ответ

0 голосов
/ 12 февраля 2010

При первом обращении this.script.src.readyState имеет значение false (скрипт все еще загружается), и для события onLoad создается обработчик. При запуске onLoad вызывается анонимная функция onLoad, которая, похоже, очень похожа на обработчик onReadyStateChange. Однако onLoad запускается только один раз, поэтому ваша функция вызывается только один раз.

Сон замедляет выполнение enuf, поэтому ваш this.script.src.readyState равен true при выполнении оператора if.

Что ты думаешь?

...