簡體   English   中英

使用PHP向文檔添加JavaScript

[英]Adding JavaScript to document with PHP

好的,這應該很容易吧? test.php:

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

當您嘗試加載test.php時,您將看到一個警報窗口。

我必須缺少一些東西,因為我無法使用模式窗口作為目標以及通過post進行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()將模式可見性設置為“ visible”,並將其innerHTML設置為響應來自test.php的文本(我不編寫代碼,因為這里似乎沒有問題;文本發送很好(我得到“ hello”))並根據需要處理發送的發布數據)。 但是沒有警報窗口! 相反,我得到“ alert('Hello')”。

除此之外,代碼工作正常,但我無法使javascript工作。 我一定缺少一些細節。 有任何想法嗎????

您不能通過innerHTML添加<script>標記來運行它們。 看到這個問題: 腳本可以與innerHTML一起插入嗎?

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

應該

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

同樣,有人張貼在我下面,腳本無法以這種方式運行。

首先,腳本代碼不能作為HTML插入,它會這樣顯示(確實如此)。

其次,即使您要在文檔中插入SCRIPT元素,初始分析也已經完成,並且警報不會執行。

您可以做的是解析腳本代碼並進行評估:

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

請注意,在這種情況下,我使用了不轉義的單引號。

基本上, Ajax Request不會加載Javascript代碼。

我正在使用類似的東西來從ajax的responseText獲取Javascript代碼;

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代碼,方法是查找“ script”標簽,然后嘗試評估javascript代碼以執行該代碼,到此完成。

PS:在我看來,用ajax加載javascript不是一個好主意。 看一下,如果您對相同的javascript代碼執行兩個ajax請求:它將加載相同的代碼兩次,因此該代碼可能因此成為錯誤的程序。

有很多Javascript庫可以為您完成此操作。

嘗試lazyload: https : //github.com/rgrove/lazyload

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM