[英]Calling javascript function from php not working
我對此的研究相當令人沮喪,盡管我不明白為什么這不起作用。
當我的索引頁面加載它應該通過 php 從數據庫加載數據,然后將數據回顯到 javascript,其中 javascript 格式並使用該數據時,如果我在 html 主體標簽的主體上放置一個 onload 事件,這將正常工作然后利用加載到js變量數據中的數據。 這可行,但我不喜歡每次加載頁面時都使用 onload 事件。
這是位於 index.php 文件頂部的 php 代碼:
if ($confirmation){
$data = $membership->get_data("assump");
echo '<script type="text/javascript">var data = '. json_encode($data) .';
var dataLoaded = ' . json_encode(false) . '; loadData();</script>';
}
loadData() function:
<script type="text/javascript">
function loadData(){
// Do stuff with the data
}
</script>
js function loadData() 在結束標記正文之前的同一個 php 文件中進一步寫入。 我應該讓 php 來構建腳本嗎? 或者將腳本放在其他地方? 或者可以調用這個 js function 嗎?
似乎您在兩個單獨的腳本塊中有兩個代碼段。 那行不通。
為了使功能提升工作,它們必須位於相同的標簽中(需要在此處定義提升的功能)。
這是一個帶有更詳細答案的類似問題: 為什么我的div中沒有調用我的javascript函數?
更新(每個請求)
瀏覽器一次讀取一個JS塊,因此提升僅在同一塊內進行(或者,當然,如果函數是在之前定義的)。 在您的情況下,可能最簡單的解決方案是將代碼分配給PHP變量,然后在同一腳本塊中將其回顯:
的PHP
$js = '';
if ($confirmation){
$data = $membership->get_data("assump");
$js .= 'var data = '. json_encode($data) .';
var dataLoaded = ' . json_encode(false) . '; loadData();';
}
的HTML
<script type="text/javascript">
<?= $js ?> // or <?php echo $js; ?>
function loadData(){
// Do stuff with the data
}
</script>
請注意,這允許您通過PHP注入JS的幾行/部分,這就是為什么我使用$js .= ...
而不是$js = ...
。
請注意,除非您先使PHP也解析它們,否則它將不適用於外部.js文件(因為您的JS位於正常解析的HTML文件中,因此無需擔心代碼中的代碼)。
echo "<script>function fBefore(x) { console.log('before'); }</script>\n";
echo "<script>fBefore(); fAfter(); </script>\n";
echo "<script>function fAfter(x) { console.log('after'); }</script>\n";
控制台日志:(Chrome)
before
Uncaught ReferenceError: fAfter is not defined
我的結論是 function 定義必須在使用之前,並且可能在單獨的腳本塊中。
那是來自 PHP 創建的文本塊。 我沒有測試onLoad
或<script src=...>
或其他隨機播放的方法。 我擔心“必須在調用前聲明”可能指的是代碼的物理放置,或者動態加載,或者其他什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.