2011-09-08 7 views
2

자바 스크립트가 많은 페이지가 있습니다. 콘텐츠가 있으며 자바 스크립트 효과가 있습니다. 나는 아약스를 사용하여 다른 내용 (물론 같은 자바 스크립트 효과로)으로 내용을 변경하고 싶다.ajax 요청 후 모든 자바 스크립트를 다시로드하는 방법은 무엇입니까?

<head> 
<script type="text/javascript"> 
function ajax(txt) { 
    if (window.XMLHttpRequest) 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    { 
     xmlhttp = new ActiveXObject("MICROSOFT.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 & xmlhttp.status==200) 
     { 
      document.getElementById("content").innerHTML=xmlhttp.responseText; 

    } 
    } 
    xmlhttp.open("GET", "index.php?p="+txt, true); 
    xmlhttp.send(); 
} 
</script> 
</head> 
<body> 
<div id="content"> 
...content... 
</div> 
<input type="button" onclick=ajax('2') value="click" /> 
</body> 

문제는 변경 내용이지만 새로운 콘텐츠가 자바 스크립트 효과 중 하나를 가지고 있지 않습니다

여기 아약스 요청에 대한 내 코드입니다. 그리고 자바 스크립트를 다시로드해야하지만 AJAX 요청 후에 어떻게 수행 할 수 있을까요?

감사합니다.

+0

자바 스크립트 효과를 게시 할 수 있습니까? –

+0

문제는 페이지가 템플릿 저장소에서 구입 한 템플릿이기 때문에 많은 자바 스크립트가 있다는 것입니다. 그래서 나는 그들 모두를 여기에 게시 할 수는 없다. – Hani

답변

0

자바 스크립트 파일을 다시로드 할 필요가 없습니다. "효과"가 페이지에 새로운 콘텐츠가 있음을 알리는 것입니다. 일반적으로 다시 함수를 실행해야합니다. jquery 함수를 사용할 경우 $ (document.ready (...))입니다. "효과"가 랩핑하는 것보다는 랩핑 된 것이 아닌 경우 내용이 변경 될 때이 함수를 호출하십시오. 자바 스크립트 파일을 다시로드하는 것이 해결책 인 경우

+0

그러나 페이지에는 많은 자바 스크립트 함수와 파일이 있으며 페이지를 만들지 않았기 때문에 콘텐츠에 영향을주는 함수가 어디에 있는지 정확히 알지 못한다. 지금 나는 그것을 편집하려고하고있다. – Hani

0

, 당신은이 기능을 시도 할 수 있습니다 :

function inject(src, cb, target){ 
    target = target || document.body; 
    var s = document.createElement('SCRIPT'); 
    s.charset = 'UTF-8'; 
    if(typeof cb === 'function'){ 
     s.onload = function(){ 
      cb(s); 
     }; 
     s.onreadystatechange = function() { 
      (/loaded|complete/).test(s.readyState) && cb(s); 
     };      
    } 
    s.src = src; 
    target.appendChild(s); 
    return s; 
}; 

을 그리고 그것을 사용하기 :

inject('path/to/new.js'); 

을하거나 작업을 트리거 할 경우 콜백 함수를 사용 파일로드시 :

inject('path/to/new.js', function(s){ 
    //the file is loaded 
}); 
+0

작동하지 않았 음 :( – Hani

+0

아마도 이반이 옳다는 것을 의미합니다. 문제는 다른 곳에 있습니다. – Mic

0

이전 및 신규 효과를위한 JavaScript 포함이런 식으로 새 노드를 삽입 한 후블록 및 다시 실행 효과 스크립트 : 당신은 이러한 작업의 많은 계획을 어떻게 든 경우

/** 
* Evaluates scripts included via innerHTML. 
* @param {Node} node Node containing scripts. 
* */ 
function evalScripts(node){ 
    if (!node) return; 

    var st = node.getElementsByTagName('SCRIPT'); 
    var strExec; 

    for (var i = 0; i < st.length; i++) { 
     strExec = st[i].text; 
     //st[i].parentNode.removeChild(st[i]); 
     st[i].text = ''; 

     try { 
      var x = document.createElement('script'); 
      x.type = 'text/javascript'; 
      x.innerHTML = strExec; 

      document.getElementsByTagName('head')[0].appendChild(x); 
     } 
     catch (bug) {} 
    } 
}; 

는 또한 head에서 이전 스크립트를 삭제하는 좋은 방법이 될 수 있습니다.

관련 문제