2012-07-20 8 views
10

Nie wiem, może to być duplikat, aleUsuń ajax załadowana zawartość i skrypt

używam ajax na mojej stronie, teraz w odpowiedzi na to wezwanie wyślę trochę html i scenariusz.

Następnie zamieniam te dane na niektóre z moich elementów na stronie.

Teraz chcę wykonać drugie wywołanie ajax, więc usunąłem zawartość html z załadowanego div. Następnie wywołanie ajax zwraca inny kod i skrypt HTML. Ale czasami jest to konflikt między poprzednim skryptem a nowo przybyłym scenariuszem.

EX. 1-ty odpowiedź zastąpić html i skrypt z jakiegoś elementu: $('.ma_right_main').html(response.data);

następnie przed 2nd wywołania usunąć zawartość: $('.ma_right_main').html('');

2nd odpowiedź wymienić html i skrypt z jakiegoś elementu: $('.ma_right_main').html(response.data);

ale po zastąpić to skrypt 2-krotny zwrócony od razu po raz pierwszy w trakcie wykonywania. Chcę go usunąć tak, jak mogę usunąć zawartość html.

+0

+1 interesujące pytanie –

Odpowiedz

3

Nie sądzę, że raz przeglądarka załadowała skrypt, który można usunąć (nie oznacza to, że nie można go usunąć z domu, ale nadal by istniało.) Na przykład, jeśli skrypt ze zmienną x, załaduj stronę, aby skrypt został wczytany, usuń skrypt z domeny, x Myślę, że nadal byłby zdefiniowany.

Są jednak sposoby na to, jeśli każdy skrypt ładowany dynamicznie był jego własnym obiektem, podczas "rozładowywania" można ustawić obiekt na wartość null. Jest to rozwiązanie, które napotkałem jakiś czas temu, szukając podobnego rozwiązania.

Znaleziony odniesienie miałem na myśli: https://stackoverflow.com/a/1346903/1475461

3

skrypty nie są naturalnie zrealizowane w ogóle. (Ustawienie .innerHTML nie spowoduje wykonania skryptów wewnątrz kodu HTML).

jQuery ręcznie wyszukuje wszystkie elementy skryptu w html, usuwa je i ocenia je. Więc jeśli używasz .html i nie chcesz, aby skrypty były wykonywane, nie dołączaj skryptów do html.

Nie można dezaktywować skryptów, więc w związku z tym należy zreorganizować witrynę. Nie wpisuj nowego kodu w odpowiedziach, jeśli mogą one być sprzeczne z poprzednimi. Użyj generycznego kodu, który jest zawsze ładowany.

+0

Masz na myśli to, że jeśli użyję .innerHTML, to tylko zawartość HTML zostanie zastąpiona. Bez efektu skryptu. – Parixit

+1

@ user631652 tak mam na myśli, jeśli zrobisz "element.innerHTML =" ";' skrypt nie zostanie wykonany. Zobacz http://jsfiddle.net/TTH4R/ – Esailija

Powiązane problemy