Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2012, 00:04
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Подкачка скриптов в Run-Time
Всем доброго. У меня проект содержит несколько видов скриптов-модулей. Каждый модуль отвечает за свою задачу, содержит функцию, которая имеет для всех модулей одинаковое имя. Она вызывается в главном JS модуле, который браузер запрашивает при открытии страницы. Весь последующий диалог построен на AJAX, страница в ходе работы не перезагружается с сервера, лишь обновляется содержимое парочки DIV-ов, которое возвращается этой а-ля абстрактной функцией.
Если путанно описал попробую показать пример:

Main.js
var j=ajax();
         j.open("GET","/site1?"+params,true);
         j.onreadystatechange = function() {
             if (j.readyState == 4)  {
        	     if(j.status == 200) {ok(j.responseText);}
        	   }
             }
         }
         j.send(null);


Site1.js
function ok(txt){alert(txt);}


Site2.js
function ok(txt){document.getElementById('nono').innerHTML=txt;}


Изначально SiteХХ не загружаются, планирую их загружать только в случае надобности, если пользователь выбирает конкретную ветку сайта, которую призваны эти скрипты-модули обрабатывать.

Как указать браузеру загружать эти js динамически по событию onreadystatechange, дабы функции ok() динамически заменяли друг друга для каждой ветки?
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2012, 01:55
Аспирант
Отправить личное сообщение для d-kaktus Посмотреть профиль Найти все сообщения от d-kaktus
 
Регистрация: 05.01.2012
Сообщений: 38

Если имеется в виду загрузка js средствами js, то есть такая конструкция
<script>
function loadscript(s){
      var script=document.createElement("script");
      script.src=s;
      document.getElementsByTagName("head")[0].appendChild(script);
}
loadscript("./file.js");
</script>


Так же в твоём случае можно загрузить любой js как строку и выполнить его функцией eval()
var j=ajax();
         j.open("GET","/site1?"+params,true);
         j.onreadystatechange = function() {
             if (j.readyState == 4)  {
                 if(j.status == 200) {eval(j.responseText);} // Если j.responseText будет, к примеру, "alert('Привет');", то он будет выполнен.
               }
             }
         }
         j.send(null);

Но в данном случае в строке не должно быть символа конца строки, т.е. весть код должен быть в одну строку.

Последний раз редактировалось d-kaktus, 12.01.2012 в 02:03.
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2012, 02:10
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от d-kaktus
Но в данном случае в строке не должно быть символа конца строки, т.е. весть код должен быть в одну строку.
что за бред?
var str = "alert(123);\r\nalert(456);";
eval(str);
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2012, 09:08
Vit Vit вне форума
Аспирант
Отправить личное сообщение для Vit Посмотреть профиль Найти все сообщения от Vit
 
Регистрация: 11.01.2012
Сообщений: 56

Сообщение от d-kaktus
есть такая конструкция
Угу, спс. Именно это я и искал.
Сообщение от d-kaktus
можно загрузить любой js как строку и выполнить его функцией eval()
Понял. Возможно и это пригодится для загрузки мелких скриптов из БД.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая подзагрузка и исполнение скриптов NT Man Javascript под браузер 2 28.08.2009 12:32