2012-07-20 2 views
10

,제거 아약스로드 된 내용 및 스크립트

나는 지금 내가 약간의 HTML과 스크립트를 보내 그 호출에 응답하여, 내 웹 사이트에서 아약스를 사용합니다.

그런 다음 해당 데이터를 페이지에있는 일부 요소로 대체합니다.

로드 된 div에서 html 콘텐츠를 제거 할 수 있도록 두 번째 아약스 호출을 만들고 싶습니다. 그런 다음 다시 ajax 호출은 다른 HTML 코드와 스크립트를 반환합니다. 그러나 때로는 이전 스크립트와 새로 도착한 스크립트 사이에 충돌이 있습니다.

EX. 일부 요소 $('.ma_right_main').html('');

2 응답 내가 html 교체 및 스크립트 : $('.ma_right_main').html(response.data);

후 2 호출하기 전에 내가 콘텐츠를 제거 : $('.ma_right_main').html(response.data);

을하지만, 이후 교체 1 응답 나는 몇 가지 요소와 HTML과 스크립트를 교체 그것은 두 번째 시간 스크립트가 처음 실행에서 여전히 거기에서 돌아 왔습니다. html 콘텐츠를 제거 할 수있는 것처럼 제거하고 싶습니다.

+0

+1 흥미로운 질문 –

답변

3

일단 브라우저에서 제거 할 수있는 스크립트를로드하지 않았다면 (이것은 DOM에서 제거 할 수는 없지만 여전히 존재할 것입니다.) 예를 들어 변수 x와 스크립트, 스크립트가로드되면 페이지를로드, dom에서 스크립트를 제거, x 나는 여전히 정의 될 것 같아요.

그러나 동적으로로드 된 각 스크립트가 자체 개체 인 경우 "언로드"할 때 개체를 null로 설정할 수 있습니다. 이것은 비슷한 솔루션을 찾을 때 잠시 뒤돌아 봤던 해결책입니다. https://stackoverflow.com/a/1346903/1475461

3

스크립트가 자연적으로 전혀 실행되지 않습니다

내가 언급 된 참조를 발견. ( .innerHTML 설정은 HTML 내에서 스크립트를 실행하지 않습니다).

jQuery는 수동으로 HTML의 모든 스크립트 요소를 찾아 제거하고 평가합니다. 따라서 .html을 사용하고 스크립트를 실행하지 않으려면 html에 스크립트를 포함시키지 마십시오.

스크립트를 비활성화 할 수 없으므로이를 염두에두고 웹 사이트를 리팩토링해야합니다. 이전 코드와 충돌 할 수있는 경우 응답에 새 코드를 포함하지 마십시오. 항상로드 된 제네릭 코드를 사용하십시오.

+0

. 내가 .innerHTML을 사용하면 HTML 콘텐츠 만 바뀝니다. 그리고 나서 스크립트의 효과는 없습니다. – Parixit

+1

@ user631652 예'element.innerHTML = "";'스크립트가 실행되지 않는다면 말입니다. http://jsfiddle.net/TTH4R/를 참조하십시오. – Esailija

관련 문제