Почему встроенный JavaScript не выполняется при вставке в ответ на вызов ajax? - PullRequest
0 голосов
/ 04 сентября 2011

Вставка JavaScript в .innerHTML не приводит к его запуску.

У меня есть то, что я называю мини-фидом, в котором пользователь отправляет сообщение.Это инициирует вызов ajax, который сохраняет пользовательские данные в таблицу mysql.Оттуда PHP генерирует xhtml.Оттуда сгенерированный PHP xhtml отправляется обратно в javascript как текст ответа.Этот xhtml содержит встроенный JavaScript, используемый для отображения «красивого времени».

Теперь, если генерируемый PHP xhtml / javascript отправляется клиенту не-AJAX-способом, это работает.Но когда я отправляю его как responseText, а затем обновляю DOM, используя .innerHTML, он не работает.Какой бы механизм не запускал javacript в XHTML, он, похоже, не похож на встроенный javascript, записанный в свойство .innerHTML тега div.Или мне нужно создать пользовательский интерфейс в javascript, просто не вставляя все это как innerHTML ... в предыдущем посте кто-то упомянул, что .innerHTML не является хорошей практикой.Возможно, это то, что они имели в виду.

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

Вы правы, innerHTML этого не сделает, если вы хотите динамически создать тег сценария, вам нужно будет использовать document.createElement для создания тега сценария, но он имеет все те же замечательные бонусы безопасности связанный с eval.

Вот еще одна идея. Разве не было бы лучше иметь некоторую функцию, определенную на главной странице, которая после добавления чего-либо нового устанавливает дату в «симпатичный» режим, не требуя, чтобы ответ AJAX знал что-либо об этом?

1 голос
/ 04 сентября 2011

Следующий код должен работать:

function onSuccess() {
    src = document.createElement('script');
    src.innerHTML = this.responseText;
    document.body.appendChild(src);
}

Но я бы согласился с cwallenpoole, что почему бы не написать весь этот код javascript (для красивого свидания) на продвинутом уровне на главной странице? (или сценарий включен или что-то).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...