Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.08.2013, 23:33
Интересующийся
Отправить личное сообщение для Redya69 Посмотреть профиль Найти все сообщения от Redya69
 
Регистрация: 30.07.2013
Сообщений: 23

dhtmlLoadScript динамическая подгрузка скриптов
Доброго времени суток.
Работая с ajax'ом столкнулся с проблемой подгрузки javaScript файлов.
Сайт предполагает быть большим, все файлы сразу загружать не хочется, а хочется по мере их надобности.
Нашел на просторах интернета для этого такую функцию:
var jsScriptsLoad = new Array;
function dhtmlLoadScript(url)
{
   if(jsScriptsLoad.join().search(url) == -1){
      jsScriptsLoad[jsScriptsLoad.length] = url;
      var e = document.createElement("script");
      e.src = url;
      e.type="text/javascript";
      document.getElementsByTagName("head")[0].appendChild(e); 
   }
}

Функция отличная. Подгружаю я ей файл js.js:
function a(){
	alert("");
}

Следующим образом:
dhtmlLoadScript("js.js");

Вписываю на страницу элемент, по клику на который вызывается функция из подгружаемого файла:
<p onclick="a();">a</p>

Открываю страницу, кликаю по "а", функция отрабатывает, алерт вылезает. Отлично

А теперь проблема! Если я вызываю функцию на следующей строчке после подгрузки файла:
dhtmlLoadScript("js.js");
a();

то при загрузке документа я вижу в консоле: "Uncaught ReferenceError: a is not defined".

Сразу мысль. файл не успел подгрузиться. Пробую такую конструкцию:
$.when(dhtmlLoadScript("js.js")).done(function(){
     a();
   });

Ничего не выходит. Помогите пожалуйста, бьюсь не один час.
Полный листинг файлов:
index.html:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script type="text/javascript">
var jsScriptsLoad = new Array;
function dhtmlLoadScript(url)
{
   if(jsScriptsLoad.join().search(url) == -1){
      jsScriptsLoad[jsScriptsLoad.length] = url;
      var e = document.createElement("script");
      e.src = url;
      e.type="text/javascript";
      document.getElementsByTagName("head")[0].appendChild(e); 
   }
}	

$(document).ready(function() {
   $.when(dhtmlLoadScript("js.js")).done(function(){
     a();
   });
});
</script>
<p onclick="a();">a</p>

js.js:
function a(){
	alert("");
}
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2013, 23:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Redya69,
http://api.jquery.com/jQuery.getScript/
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2013, 20:15
Интересующийся
Отправить личное сообщение для Redya69 Посмотреть профиль Найти все сообщения от Redya69
 
Регистрация: 30.07.2013
Сообщений: 23

Спасибо, но тоже помучался. Пришлось сообразить такую конструкию:
$.when($.getScript("js.js")).done(function(){
      a();
 });
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2013, 21:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от Redya69
$.when($.getScript("js.js")).done(function(){ a(); });
странная конструкция зачем вам when и done то нужен? когда в $.getScript() есть всё что вам нужно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая загрузка скриптов demoniqus Общие вопросы Javascript 12 18.04.2013 19:50
ajax + динамическая подгрузка скриптов czp AJAX и COMET 3 26.03.2013 22:31
динамическая загрузка скриптов dolas Events/DOM/Window 6 08.03.2013 06:07
Динамическая подгрузка и ВЫГРУЗКА скрипта... digitalbrain Events/DOM/Window 7 10.12.2012 14:17
Динамическая подзагрузка и исполнение скриптов NT Man Javascript под браузер 2 28.08.2009 12:32