簡體   English   中英

從 php 呼叫 javascript function 無效

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

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