Скрипт на JS не работает без перезагрузки страницы

программирование JavaScript AJAX

Имеем в теге <head> следующее:

<script type='text/javascript' src='http://_путь_к_скрипту_/script1.js'></script>

Имеем функцию (JS):

function changeScript() {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'http://_путь_к_скрипту_/script2.js');
head.insertBefore(script, head.firstChild);
head.appendChild(script);
}

имеем событие, вызывающее данную функцию (допустим, кнопка с onClick)
По великой идее при нажатии на кнопку должны выполняться всякие колдоства с аяксом (к делу не относится) и сменяться скрипт. Все происходит так как нужно, т.е. в <head> появляется именно требуемое:
<script type='text/javascript' src='http://_путь_к_скрипту_/script2.js'></script>
но исполняется первый вариант. Перезагрузка страницы - исключена. Как заставить работать второй скрипт?


Примечание:
>Вызвать его ручками принудительно.

А вот он и не вызывается как раз-таки. Для браузера его не существует. Что имелось в виду под "ручками"?

Примечание:
Внесу дополнительную ясность:

<head>
...
<script type="text/javascript" src="http://_path_to_/engine.js"></script>
<script type="text/javascript" src="http://_path_to_/javascript.js"></script>
<script type="text/javascript" src="http://_path_to_/calendar.js"></script>
<script type="text/javascript" src="http://_path_to_/calendar-ru.js"></script>
</head>

Аяксом на onClick сменяется содержимое ДИВа на страничке. Файл calendar-ru.js содержит лангпак для календаря. На тот же самый onClick должен меняться и лангпак на calendar-en.js, или calendar-de.js

Все так и происходит. Но переменные остаются из самого первого файла плюс добавляются из второго, плюс из третьего, если уж начать по языкам кликать. Единственное на данный момент, но неприемлемое решение - это location.reload(); Суть - избавиться от переменных свойственных "предыдущему" языку.

Ну как-то так. Спасибо за терпение.

@mexoboy: Ваш способ только добавляет дополнительный скрипт пониже предыдущего ((
Ответы:
Вызвать его ручками принудительно.
Можно вместо подмены пути к скрипту запросить его через ajax и выполнить, по-моему, с помощью eval(), точно не помню название. Но говорят, что это не слишком секьюрно
Не совсем понятно зачем нужна строка:  head.insertBefore(script, head.firstChild); Есть мнение, что вы не дожидаясь загрузки скрипта пытаетесь манипулировать с еще не загруженными данными, что эквивалентно этому примеру:
после того как скрипт script2.js будет загружен его еще и запустить надо-как это сделано у вас?


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.