2012-11-18 7 views
2

이전에 아약스 호출에서로드 된 PHP 페이지에서 자바 스크립트 코드를 실행하는 방법은 무엇입니까?자바 스크립트가 아약스와 함께 실행되지 않았습니다

코드 샘플 : 나는 selectQuest.php에서 질문을 선택하고 showRecord라는 페이지를 요청 아약스를 사용하고 있습니다 : 아약스 + 기능 parseScript는 아약스 요청 된 페이지

Senario에서 실행되는 자바 스크립트를 강제로 .php.

showRecord.php는 선택한 쿼리에 해당하는 정보가 들어있는 테이블을 표시합니다. 실행되지 않는 javascript가 포함되어 있습니다. 자바 스크립트를 반환하면 submit을 클릭 할 때 db의 정보를 업데이트 할 수 있습니다.

아래 코드 샘플은 showRecord.php에서 찾을 수 있습니다. 마지막으로 showRecord를 실행하면 updateQuestion.php에 대한 또 다른 Ajax 요청이 만들어집니다.

그러나 자바 스크립트 showRecord.php

function show(fileTex,aTex,bTex,cTex,dTex,eTex,newQuestNumTex,textAreaTex,textQuesAnsTex) 
    { 

    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) 
    { 
    var resp=xmlhttp.responseText; 
    document.getElementById("txtHint2").innerHTML=resp; 
    parseScript(resp); 
    // document.getElementById("txtHint").style.border="1px solid #A5ACB2"; 
    } 
    } 
xmlhttp.open("POST","updateQuestionAdmin.php?param="+fileTex+"&text_A="+aTex+"&text_B="+bTex+"&text_C="+cTex+"&text_D="+dTex+"&text_E="+eTex+"&text_ID="+newQuestNumTex+"&text_Ques="+textAreaTex+"&text_Ans="+textQuesAnsTex,true); 
xmlhttp.send(); 
} 

// this function create an Array that contains the JS code of every <script> tag in parameter 
// then apply the eval() to execute the code in every script collected 
function parseScript(strcode) { 
    var scripts = new Array();   // Array which will store the script's code 

    // Strip out tags 
    while(strcode.indexOf("<script") > -1 || strcode.indexOf("</script") > -1) { 
    var s = strcode.indexOf("<script"); 
    var s_e = strcode.indexOf(">", s); 
    var e = strcode.indexOf("</script", s); 
    var e_e = strcode.indexOf(">", e); 

    // Add to scripts array 
    scripts.push(strcode.substring(s_e+1, e)); 
    // Strip from strcode 
    strcode = strcode.substring(0, s) + strcode.substring(e_e+1); 
    } 

    // Loop through every script collected and eval it 
    for(var i=0; i<scripts.length; i++) { 
    try { 
     eval(scripts[i]); 
    } 
    catch(ex) { 
     // do what you want here when a script fails 
    } 
    } 
} 
</script> 
+2

난 강력하게 자바 스크립트를 사용하는 것이 좋습니다 AJAX 요청을하기 위해 jQuery 또는 Dojo와 같은 프레임 워크; 네가 여기있는 것보다 훨씬 좋을거야. – q3d

+0

아약스가 요청한 페이지에서 javascript를 강제로 실행하는 방법을 알고 싶습니다. ??? –

+0

'updateQuestionAdmin.php'에서 어떤 스크립트가 반환됩니까? 브라우저의 디버깅 도구로 JavaScript 코드를 단계별로 실행 해 보았습니까? 거기에있을 것으로 예상되는 스크립트로'eval' 문에 도달합니까? –

답변

0

iyrag 말했듯에서 실행되지, 자바 스크립트 프레임 워크는 도움이 될 것이다. jQuery는 callback function으로, 스크립트가 성공적으로로드되고 아약스로 끝나면 실행할 수 있습니다.

당신은 예를 들어, 그 콜백 함수 내에서 다른 물건을 실행할 수 있습니다 : 태그가 jQuery를 갖추고 있기 때문에 나는이 게시

$.ajax({ 
    url: 'test.php', 
    success: function(data) { 
    $('#result').html(data); // Display script return on some div 
    someFunction(); // blabla 

// Execute some other javascript here, you'll be abble to access the DOM of the test.html 
// page because here you'lle be sure that test.html is loaded.showRecord.php should not contain javascript, which would rather be here 

    } 
}); 

...

관련 문제