Istnieje element div o nazwie „Treść”:
<div id="content"></div>
Powinien być wypełniony danymi z pliku PHP, przez AJAX, w tym <script>
tagiem. Jednak skrypt wewnątrz tego tagu nie jest wykonywany.
<div id="content"><!-- After AJAX loads the stuff that goes here -->
<script type="text/javascript">
//code
</script>
<!-- More stuff that DOES work here -->
</div>
javascript
html
ajax
JCOC611
źródło
źródło
window.onload
utworzeniuXMTHttpRequest
obiektu w celu zażądania innej strony (php), która zawiera zawartość div, w tym skrypt. Robię to ze zwykłym JS, bez bibliotek (poza moim własnymOdpowiedzi:
JavaScript wstawiony jako tekst DOM nie zostanie wykonany. Możesz jednak użyć dynamicznego wzorca skryptu, aby osiągnąć swój cel. Podstawowym pomysłem jest przeniesienie skryptu, który chcesz wykonać, do zewnętrznego pliku i utworzenie tagu skryptu, gdy otrzymasz odpowiedź Ajax. Następnie ustaw
src
atrybut swojego tagu skryptu i voila, ładuje i wykonuje zewnętrzny skrypt.Ten inny post StackOverflow może być również pomocny: Czy skrypty można wstawiać za pomocą innerHTML? .
źródło
$('#audit-view script').each(function (index, element) { eval(element.innerHTML); })
Użyłem tego kodu, działa dobrze
źródło
Jeśli ładujesz blok skryptu w swoim div przez Ajax w ten sposób:
... po prostu aktualizuje DOM twojej strony, myFunction () niekoniecznie jest wywoływana.
Możesz użyć metody wywołania zwrotnego Ajax, takiej jak ta w ajax () jQuery metodzie aby zdefiniować, co ma być wykonane po zakończeniu żądania.
To, co robisz, różni się od ładowania strony z zawartym w niej JavaScriptem od samego początku (co jest wykonywane).
Przykład użycia funkcji wywołania zwrotnego sukcesu i wywołania zwrotnego błędu po pobraniu zawartości:
Innym szybkim i nieuczciwym sposobem jest użycie eval () do wykonania dowolnego kodu skryptu, który wstawiłeś jako tekst DOM, jeśli nie chcesz używać jQuery lub innej biblioteki.
źródło
Oto skrypt, który ocenia wszystkie znaczniki skryptu w tekście.
Po prostu wywołaj tę funkcję po otrzymaniu kodu HTML z serwera. Uwaga: używanie
eval
może być niebezpieczne.Demo: http://plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p=preview
źródło
To „po prostu działa” dla mnie przy użyciu jQuery, pod warunkiem, że nie spróbujesz dołączyć podzbioru kodu HTML zwróconego przez XHR do dokumentu. (Zobacz ten raport o błędzie przedstawiający problem z jQuery.)
Oto przykład pokazujący, że działa:
Oto odpowiednik powyższego: http://jsfiddle.net/2CTLH/
źródło
Oto funkcja, której możesz użyć do analizowania odpowiedzi AJAX, zwłaszcza jeśli używasz minifiedjs i chcesz, aby wykonywał zwrócony kod JavaScript lub po prostu chcesz przeanalizować skrypty bez dodawania ich do DOM, obsługuje również błędy wyjątków. Użyłem tego kodu w bibliotece php4sack i jest przydatny poza biblioteką.
źródło
Jeśli wstrzykujesz coś, co wymaga tagu skryptu, możesz otrzymać nieprzechwycony błąd składni i powiedzieć nielegalny token . Aby tego uniknąć, pamiętaj o pominięciu ukośników w zamykających tagach skryptu. to znaczy;
To samo dotyczy wszystkich tagów zamykających, takich jak tag formularza.
źródło
Miałem podobny post tutaj, ładowanie addEventListener na ładowanie ajax BEZ jquery
Jak rozwiązałem, wstawianie wywołań funkcji w ramach mojej funkcji stateChange. Strona, którą ustawiłem, zawierała 3 przyciski, które ładowały 3 różne strony do obszaru contentArea. Ponieważ musiałem wiedzieć, który przycisk został naciśnięty, aby załadować stronę 1, 2 lub 3, mogłem łatwo użyć instrukcji if / else, aby określić, która strona jest ładowana, a następnie którą funkcję uruchomić. Próbowałem zarejestrować różne odbiorniki przycisków, które działałyby tylko po załadowaniu określonej strony z powodu identyfikatorów elementów.
więc...
if (ładowana jest strona1, pageload = 1) uruchom funkcję registerListeners1
to samo dla strony 2 lub 3.
źródło
To zadziałało dla mnie, wywołując eval dla każdej zawartości skryptu z ajax .done:
źródło
Mój wniosek jest taki, że HTML nie zezwala na znaczniki ZAGROŻONY SKRYPT. Jeśli używasz javascript do wstrzykiwania kodu HTML, który zawiera tagi skryptu, nie zadziała, ponieważ javascript również znajduje się w tagu script. Możesz to przetestować następnym kodem i przekonasz się, że nie zadziała. Przykład użycia jest taki, że dzwonisz do usługi za pomocą AJAX lub podobnego, otrzymujesz HTML i chcesz bezpośrednio wstrzyknąć go do HTML DOM. Jeśli wstrzyknięty kod HTML ma wewnątrz znaczniki SCRIPT, nie zadziała.
źródło
Inną rzeczą do zrobienia jest załadowanie strony za pomocą skryptu takiego jak:
Spowoduje to załadowanie strony, a następnie uruchomienie skryptu i usunięcie modułu obsługi zdarzeń po uruchomieniu funkcji. Nie uruchomi się to natychmiast po załadowaniu AJAX, ale jeśli czekasz, aż użytkownik wejdzie do elementu div, zadziała to dobrze.
PS. Wymaga Jquery
źródło