AJAX — замена javascript на странице: ajax не заменит javascript

#php #javascript #ajax #insert

#php #javascript #ajax #вставить

Вопрос:

Я пытаюсь заменить немного javascript на своей странице с помощью AJAX, но по какой-то причине AJAX не заменит его… Когда я использую:

     alert(document.getElementById('treintracking').innerHTML);
  

Я ясно вижу javascript из фрагмента сценария: (это начальная строка фрагмента javascript)

 <script type="text/javascript" id="treintracking">
  

Для замены скрипта я использую это:

 document.getElementById('treintracking').innerHTML = responseText;
  

Итак, почему AJAX не хочет заменять javascript?
Я протестировал, и php-файл, используемый для генерации заменяющего javascript, работает нормально.
Я также принял во внимание, что подлежащий замене javascript уже имеет теги вокруг него, поэтому я удалил их из файла php.
Но он все равно не заменит содержимое…

Кроме того, если он поместит somefunction() в этот javascript, будет ли он затем запущен, или я должен сделать что-то особенное?

Примечание: сценарий javascript генерируется в файле php.

РЕШЕНИЕ: сейчас я использую это внешнее решение, я понятия не имею, как оно работает, но оно работает отлично: http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml [Я взял сценарий загрузки из исходного кода страницы, так как его не было в самой статье …]

Комментарии:

1. Возможно, он заменяет его, но этот код уже выполнен.

2. Что вы имеете в виду? Он также не отображается в исходном коде…

3. Вы не можете «удалить» JavaScript таким образом. Как только <script> тег был выполнен, он оказал свое влияние на глобальный контекст, и удаление или изменение <script> элемента этого не изменит.

4. Хорошо, это звучит справедливо. Возможно, у вас есть предложения о том, как я мог бы это сделать? Или я должен задать для этого новый вопрос? Идея?: не мог бы я создать функцию, которая задерживается на setTimeout, которая вызывает функцию во вновь размещенном javascript?

5. @laarsk, это действительно зависит от того, что находится в теге script, и что вы хотите сделать, чтобы изменить то, что произошло. (например, если есть прослушиватели событий, если вы хотите вернуть содержимое к тому, что было до запуска treintracking скрипта, и т.д.)

Ответ №1:

Добавление JavaScript через innerHTML не оценивается.

Если вы хотите добавить новый код, просто установите источник в новый внешний файл JavaScript.

Поэтому вместо использования вызова Ajax вы просто устанавливаете src

 document.getElementById('treintracking').src = "new/path.php?a=b";
  

Другое решение [которого я бы избегал любой ценой] eval() .

Комментарии:

1. Вау. Это потрясающе просто! Чем на самом деле это отличается от вызова AJAX? Потому что это кажется намного проще!

2. Хорошо, я попробовал это, но также это не выполняет новый скрипт и не заменяет старый javascript

3. @laarsk — Возможно, вы захотите задать другой вопрос: я пытаюсь сделать …, где javascript будет возвращен вызовом ajax. Как я могу заставить это работать.

4. Есть ли ошибки? Вы пробовали простой пример с предупреждением?

5. Я не верю, что были какие-либо ошибки, но я уже нашел другое решение: javascriptkit.com/javatutors/loadjavascriptcss2.shtml

Ответ №2:

Вероятно, вам придется встроить новый javascript в функцию, которая может назначать новое содержимое другим функциям, а затем вызывать внешнюю функцию. Это будет не очень красиво.

Комментарии:

1. Как именно вы подразумеваете «назначить новое содержимое другим функциям»?