#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. Как именно вы подразумеваете «назначить новое содержимое другим функциям»?