2012-06-04 3 views
1

AJAX로 페이지를 가져 오려고하는데, 해당 페이지를 가져 오면 Javascript 코드가 포함되어 실행되지 않습니다.AJAX- 페이지를로드 한 후 JavaScript 스크립트를 실행하면 작동하지 않습니다.

왜? 내 아약스 페이지에서

간단한 코드 :

<script type="text/javascript"> 
alert("Hello"); 
</script> 

... 그리고 그것을 실행하지 않습니다. Google Maps API를 사용하고 AJAX로 마커를 추가하려고하므로 새로운 마커를 가져 오는 AJAX 페이지를 실행할 때 데이터베이스에 저장하고지도에 마커를 동적으로 추가해야합니다.

하지만이 방법으로 단일 자바 스크립트 기능을 실행할 수 없기 때문에 어떻게해야합니까?

내가 미리 정의한 페이지의 기능이 보호되었거나 비공개입니까?

** AJAX 기능으로 업데이트 ** Deukalion에 의해

function ajaxExecute(id, link, query) 
{ 
    if (query != null) 
    { 
     query = query.replace("amp;", ""); 
    } 

    if (window.XMLHttpRequest) 
    { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
     // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      if (id != null) 
      { 
        document.getElementById(id).innerHTML=xmlhttp.responseText; 
      } 
     } 
    } 

    if (query == null) 
    { 
     xmlhttp.open("GET",link,true); 
    } 
    else 
    { 
     if (query.substr(0, 1) != "?") 
     { 
      xmlhttp.open("GET",link+"?"+query,true); 
     } 
     else 
     { 
      xmlhttp.open("GET",link+query,true); 
     } 
    } 
    xmlhttp.send(); 
} 

** 솔루션 **

var content = xmlhttp.responseText; 

if (id != null) 
{ 

    document.getElementById(id).innerHTML=content; 
    var script = content.match("<script[^>]*>[^<]*</script>"); 

    if (script != null) 
    { 
     script = script.toString().replace('<script type="text/javascript">', ''); 
     script = script.replace('</script>', ''); 
     eval(script); 

    } 
} 

및 특정 이벤트에, 내가 스크립트 addevent 리스너 이내했다 대신

은 만들기 a "select onchange = 'executeFunctionNotIncludedInAjaxFile();'"이것에 대해 addEventListener ("change", functionName, false)를 추가해야했습니다. 평가중인 스크립트에서.

+2

AJAX 요청을 만들고 응답을 처리하는 코드 예를 포함하십시오. –

답변

5

. 당신은 그들의 innerHTML (IE는 innerTEXT을 선호 할) 수는 <script> 태그를 찾아 (가 DOM을 업데이트하기 전에 정규식과 스크립트를 발견하지만, 거의 jQuery를가하는 일입니다) 다음 eval() 스크립트를 직접 할 수 있습니다.

+0

스크립트를 정규식화할 수 있었기 때문에 스크립트 만 얻을 수있었습니다. 그렇다면 나는 그들에게 eval을 실행 시키지만 작동하지 않는다 ... AJAX를 통해로드되지 않은 메인 함수를 참조하는 스크립트가있는 DOM 요소가 추가되었다고하자. – Deukalion

+0

서버가 똑바로 자바 스크립트를 반환하면 어떻게 될까요? 그것은'eval'을 훨씬 쉽게 사용할 수있게 해줍니다. (그러나 [CSRF] (http://incompleteness.me/blog/2007/01/01/csrf-attacks-or-how-to-avoid-exposing-your-gmail-contacts/)를주의하십시오.) –

+0

예 코스; 당신이 돌아 오는 것이 순수한 자바 스크립트라면, 그것은 다른 것입니다. 신뢰 문제를 이해하는 것이 중요합니다. – Pointy

0

AJAX 요청 후 반환 된 HTML을 가져 와서 처리 할 수있는 "성공한 경우"기능을 만들 수 있습니다. 다음 뭔가가 실행됩니다.

코드 예제가있는 경우 상황에 맞는 코드 솔루션을 제공 할 수 있습니다. 그러나 단지 표준 XMLHttpRequest 객체를 사용하여 다음을 수행 할 수 있습니다 : 당신이 그것에 컨테이너의 innerHTML 일부 업데이트 된 콘텐츠로, 브라우저가 단순히 실행되지 않습니다 스크립트를 설정 같은 것을 수행하여 페이지를 업데이트

xhr = new XMLHttpRequest(); 
xhr.open("GET","ajax_info.txt",true); 
xhr.onreadystatechange=function() 
{ 
if (xhr.readyState==4 && xhr.status==200) 
    { 
    document.getElementById("myDiv").innerHTML = xhr.responseText; 
    } 
} 
xhr.send(); 
​ 
+1

HTML에 '

관련 문제