2012-07-05 2 views
0

좋아, 이거 쉽지? test.php : 당신이 당신의 test.php를로드 할 때PHP로 문서에 자바 스크립트 추가하기

function some_javascript() { 
     echo "Hello"; 
     echo "<script type='text/javascript'>alert('Hello')<script>"; 
} 

당신은 경고 창을 얻을 것이다.

대상으로 모달 창을 사용하고 게시물을 통해 AJAX 요청을 사용하여이 작업을 수행 할 수 없기 때문에 뭔가를 놓치고 있어야합니다.

index.html을 : 여기

내가 할 노력하고있어의 기본 구조입니다)

<html> 
<head> 
<style> 
#modal { 
    visibility:hidden; 
} 
</style> 
</head> 
<body> 
    <div id="modal"> 
    </div> 
    <button onclick="call_ajax();">Call Ajax</button> 
</body> 
</html> 

call_ajax은 (을 "볼 수"테스트에서 응답 텍스트의 innerHTML을 모달 가시성을 설정합니다 .php (여기서는 문제가없는 것 같아서 코드를 작성하지 않고 텍스트는 잘 보내어 ("안녕하세요") 보내진 데이터는 필요에 따라 처리됩니다.) 그러나 경고 창이 없습니다! 대신 나는 "경고 ('안녕하세요') '를 얻습니다.

그 외의 코드는 정상적으로 작동하지만 javascript를 사용할 수 없습니다. 누락 된 세부 사항이 있어야합니다. 어떤 아이디어?

답변

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

누군가가 저 아래에 게시 된

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

는 또한, 스크립트는이 방법으로 실행할 수 없습니다이어야한다.

+0

예, "/"여기에 입력하지 않았습니다. 원본 파일에 있습니다. – user1504736

0

먼저 스크립트 코드를 HTML로 삽입 할 수 없으므로 스크립트 코드를 HTML로 삽입 할 수 없습니다.

둘째, 문서에 SCRIPT 요소를 삽입하더라도 초기 구문 분석이 이미 완료되어 경고가 실행되지 않습니다.

<!DOCTYPE html> 
<html> 
<head> 
    <style> 
     #modal { 
      visibility:hidden; 
     } 
    </style> 
    <script type="text/javascript"> 
     function call_ajax() { 
      var ajaxData = "Hello\n<script type='text/javascript'>alert('Hello')<\/script>"; 
      var scriptStartPos = ajaxData.indexOf("<script type='text/javascript'>"); 
      if(scriptStartPos >= 0) { 
       var scriptPos0=scriptStartPos+31; 
       var scriptEndPos= ajaxData.indexOf("<\/script>", scriptPos0); 
       if(scriptEndPos >= scriptPos0) { 
        eval(ajaxData.substring(scriptPos0,scriptEndPos)); 
       } 
      } 
     } 
</script> 
</head> 
<body> 
<div id="modal"> 
</div> 
<button onclick="call_ajax();">Call Ajax</button> 
</body> 
</html> 

내가이 경우 취소 이스케이프 작은 따옴표를 사용하는 것을 알 수하십시오 : 당신이 할 수있는 일

스크립트 코드를 분석하고 그것을 평가 후면입니다.

0

기본적으로 Ajax Request에는 Javascript 코드가로드되지 않습니다.

저는 이런 식으로 Javascript 코드를 사용하여 Ajax의 responseText에서 작동합니다.

자바 스크립트 :이 코드는 빈 div 요소를 작성합니다

//pseudo function : 
function call_ajax() { 
    var ajaxResponse = "some data you have received with ajax"; 

    var div = document.createElement("div"); 
    div.innerHTML = ajaxResponse; 
    var script = div.getElementsByTagName("script"); 
    for(var i=0; i < script.length; i++) { 
    try{eval(script[i].innerHTML)}catch(ex){alert(ex)}; 
    } 
}; 

, 그것은 innerHTML을 아약스와 함께로드 된 데이터 될 것입니다. 자바 스크립트가 간단한 텍스트를 html 노드로 변환 한 다음 응답에 Javascript 코드가 포함되어 있는지 확인하고 "script"태그를 찾은 다음 javascript 코드를 실행하여 eval로 코드를 실행하면 이제 완료됩니다.

피S : 내 비전에는 아약스로 자바 스크립트를로드하는 것은 좋지 않습니다. 동일한 자바 스크립트 코드에 대해 두 번의 아약스 요청을하면, 동일한 코드를 두 번로드하므로 코드가 버그가 발생할 수 있습니다.

관련 문제