2014-09-12 49 views
0

後,我有一個使用此功能加載另一個PHP與阿賈克斯HTML:運行JavaScript的Ajax

function LoadContent(n,func) 
{   
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState== 4 && xmlhttp.status == 200) 
     { 
      document.getElementById("div-content").innerHTML=xmlhttp.responseText; 
     if(typeof(func)==='undefined') 
       { 
       // nothing 
       } 
      else 
       { 
       eval(func); 
       } 

     } 
    } 
    xmlhttp.open("GET",n,true); 
    xmlhttp.send(); 
} 

到目前爲止,一切OK。要加載的PHP生成包含

<script> 
function foo() { 
alert('hello'); 
} 
</script> 

和原來的HTML調用與javascript:LoadContent('file.php','foo()')裝載一個HTML,但FOO()沒有被調用。 eval()行在Chrome中表示「沒有這樣的功能」。

我如何管理它,所以在Ajax加載後,將駐留在加載的html中的JavaScript函數將被執行?

+0

如果HTML你發佈是服務器發送的*響應*,在對它做任何事情之前,您還必須將其添加到文檔中。不過,我認爲這是從服務器加載JS並傳遞一串JS,在加載內容後應該評估它,這是一種糟糕的做法。 – 2014-09-12 21:07:03

+0

是的,它被添加到文檔中,我只是縮短了功能。我編輯過它。 – Michael 2014-09-12 21:11:08

+2

啊。出於安全原因,通過「innerHTML」添加的「腳本」不會被瀏覽器評估(請參閱https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML#Security_considerations)。所以你的功能真的不存在。另請參見[可以使用innerHTML插入腳本嗎?](http://stackoverflow.com/q/1197575/218196) – 2014-09-12 21:12:03

回答

0

而是執行此操作:

javascript:LoadContent('newstandby.php',foo) 

因爲foo是一個函數,它會被調用,因爲它是作爲函數傳遞迴調,而不是它的結果(foo()

+0

同樣的結果。 foo()未識別。 – Michael 2014-09-12 21:05:25

+0

因爲'foo'還不存在,所以無法工作(至少如果我理解正確的話)。 – 2014-09-12 21:06:29

+0

PHP從Ajax調用加載時存在。 – Michael 2014-09-12 21:10:06