[英]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.