Подгрузка и исполнение JavaScript из внешнего файла (AJAX)

Тема в разделе "JavaScript", создана пользователем porsche2, 20 ноя 2011.

Модераторы: ZiX
  1. porsche2

    porsche2

    Регистр.:
    18 ноя 2007
    Сообщения:
    667
    Симпатии:
    210
    JS для меня далекий друг, поэтому прощу помощи, желательно квалифицированной ))

    Задача: Разместить все JS-скрипты в одном файле, чтобы потом содержимое этого файла подгружать[быстро менять/исчезает необходимость пихать скрипты в шаблон и шаблонизатор].

    С выводом текста проблем не возникло:

    HTML:
    <script type="text/javascript" language="javascript">
    function getXmlHttp() {
        var xmlhttp;
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
        if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            xmlhttp = new XMLHttpRequest();
        }
        return xmlhttp;
    }
    (function () {
        var xmlhttp = getXmlHttp();
        xmlhttp.open('GET', '../scripts.html', false);
        xmlhttp.send(null);
        if (xmlhttp.status == 200) {
            document.getElementById("foot").innerHTML = xmlhttp.responseText;
     // Содержимое файла scripts.html выводим внутри элемента c id = foot.
        }
    })();
    </script>
    Но, по естественным причинам, javascript не исполняется.

    Вопрос, что нужно дописать, чтобы скрипты исполнялись, т.е. получить аналог SSI но при помощи JavaScript (библиотеки не используются, совсем).

    P.S. SSI и Frame не предлагать.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    функция eval исполняет
    Код:
    eval(xmlhttp.responseText);
    
    так если надо подключить файл яваскрипта может так подойдёт добавить в head
    HTML:
    
    <head>
    <script type="text/javascript" src="../scripts.html"></script>
    </head>
    
    и в файле выполнять скрипт когда загрузится
    Код:
    function init(){
        //код
    }
    window.onload = init;
    
     
    porsche2 нравится это.
  3. vlad_v

    vlad_v

    Регистр.:
    30 июн 2006
    Сообщения:
    444
    Симпатии:
    67
    что бы выполнялся подгружаемый js
    не надо в него включать тега
    <script type="text/javascript" language="javascript">
     
    porsche2 нравится это.
  4. Speech

    Speech Постоялец

    Заблокирован
    Регистр.:
    24 авг 2011
    Сообщения:
    110
    Симпатии:
    49
    porsche2,
    Если не поленитесь потратить часа 2-3 на чтение данной книжки, то сделаете такие вещи сами:
    http://progbook.ru/ajax/866-bibo-jquery-podrobnoe-rukovodstvo-po-prodvinutomu.html
     
  5. porsche2

    porsche2

    Регистр.:
    18 ноя 2007
    Сообщения:
    667
    Симпатии:
    210
    Speec, jQuery, это библиотека, а у меня библиотеки не используются, я об этом в первом посте написал.
     
  6. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    630
    Симпатии:
    1.395
    Вам правильно подсказали решение выше.
    Используйте eval для работы с подгружаемым js.
    замените строку
    HTML:
    document.getElementById("foot").innerHTML = xmlhttp.responseText;
    на этот код

    HTML:
            eval(xmlhttp.responseText);
    		aaa('---------');
    		alert('вау');
    		aaa('=======');
    
    а scripts.html
    сделайте такого содержания
    HTML:
    function aaa(v)
    {
    alert('qweqwe'+v);
    }
    и наслаждайтесь эффектом. ;)
     
  7. Ramazan

    Ramazan пыщ-пыщ

    Регистр.:
    28 янв 2007
    Сообщения:
    471
    Симпатии:
    98
    Самый простой вариант ( и пожалуй единственный ) - это прописать javascript в файле, который грузиться с html страницей ( скажем function.js ), в функцию скажем afterAjaxLoad, и при загрузке контента через ajax выполнять эту функцию