2012-07-05 68 views
0

好的,所以這應該很容易吧? test.php的:使用PHP添加JavaScript到文檔

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

,當你嘗試加載test.php的,你會得到一個警告窗口。

我必須缺少一些東西,因爲我無法使用模式窗口作爲目標以及通過發佈的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(我不寫代碼,因爲我在這裏似乎沒有問題;文本發送得很好(我收到「hello」),發送的發送數據根據需要進行處理)。但沒有警報窗口!相反,我會收到「alert('Hello')」。

除此之外,代碼工作正常,但我無法讓JavaScript工作。 必須有一些我錯過的細節。 任何想法????

回答

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

應該

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

也有人貼我下面,腳本不能以這種方式運行。

+0

是的,「/」我錯過了在這裏打字。它在原始文件中。 – user1504736 2012-07-05 18:03:04

0

首先,腳本代碼不能作爲HTML插入,它會顯示爲(和它)。第二,即使您要在文檔中插入SCRIPT元素,初始解析也已完成,並且警報將不會執行。

你可以做的是解析腳本代碼和eval它:

<!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;

的Javascript:

//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)}; 
    } 
}; 

此代碼將創建一個空白div元素,它是innerHTML將裝有AJAX數據。 Javascript會將您的簡單文本轉換爲html節點,然後您可以通過查找「腳本」標籤找到響應是否包含Javascript代碼,然後試着評估javascript代碼以執行代碼,現在就完成了。

P.S:在我看來,用ajax加載javascript並不是一個好主意。看看如果你對同一個javascript代碼做兩個ajax請求:它會加載兩次相同的代碼,所以代碼可能會因爲這個而變成bug。

相關問題