2012-11-18 87 views
2

如何使JavaScript代碼執行在以前從ajax調用加載的PHP頁面?JavaScript不執行與AJAX

代碼示例: AJAX +功能parseScript強制的JavaScript的AJAX請求的頁面

塞納里奧上運行:我選擇從selectQuest.php一個問題,使用AJAX請求它​​被稱爲showRecord頁.PHP。

頁面showRecord.php將顯示一個表,其中包含與所選quesion相對應的信息。它包含不運行的javascript。當我單擊提交時,javascript返回將允許我更新db中的信息。

下面的代碼示例可在showRecord.php中找到。最後,如果後者運行showRecord,則會爲updateQuestion.php發出另一個Ajax請求。

但JavaScript是不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

我會強烈建議使用一個Javascript框架(如jQuery或Dojo)發出AJAX請求;它會比你在這裏有更好的地獄。 – q3d

+0

iyrag任何想法如何強制JavaScript在ajax請求的頁面上執行??? –

+0

'updateQuestionAdmin.php'返回哪個腳本?您是否嘗試使用瀏覽器的調試工具瀏覽JavaScript代碼?它是否會與您期望在那裏的腳本達成'eval'聲明? –

回答

0

正如iyrag說運行,一個JavaScript框架會有所幫助。 jQuery有一個callback function,您可以在腳本成功加載並使用ajax完成時運行。

你要的是回調函數中執行一些其他的東西,比如:

$.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 

    } 
}); 

我還張貼了這個,因爲標籤擁有jQuery的...