後,我有一個使用此功能加載另一個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函數將被執行?
如果HTML你發佈是服務器發送的*響應*,在對它做任何事情之前,您還必須將其添加到文檔中。不過,我認爲這是從服務器加載JS並傳遞一串JS,在加載內容後應該評估它,這是一種糟糕的做法。 – 2014-09-12 21:07:03
是的,它被添加到文檔中,我只是縮短了功能。我編輯過它。 – Michael 2014-09-12 21:11:08
啊。出於安全原因,通過「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