PHP 運行於伺服端,JavaScript 運行於瀏覽器端。兩者「互相調用」本質是:PHP 動態生成 JS 代碼輸出到 HTML,或 JS 發起 HTTP 請求獲取 PHP 輸出。無直接函數級調用。
<script src="b.php"> 載入 PHP 生成的 JS 變量<!-- a.html -->
<script src="b.php?action=test"></script>
<script>alert(jstext);</script>
<?php // b.php
$action = $_GET['action'];
header('Content-Type: application/javascript');
echo "var jstext = '" . addslashes($action) . "';";
關鍵:PHP 輸出合法 JS 語句,瀏覽器當作腳本執行。
<?php $url = 'https://example.com'; ?>
<script>
var ds = "";
alert(ds);
</script>
注意:必須對變量做 addslashes() 或 json_encode() 防 XSS 與語法錯誤。
<script> 呼叫前端已定義函數<?php
// 條件成立時輸出調用代碼
if ($needAlert) {
echo '<script>showAlert(' . json_encode($msg) . ');</script>';
}
?>
<?php $userId = 100; ?>
<input type="hidden" id="userId" value="<?php echo $userId; ?>">
<script>
var userId = document.getElementById('userId').value;
console.log(userId);
</script>
// 前端
fetch('api.php?action=getData')
.then(r => r.json())
.then(data => console.log(data));
<?php // api.php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'data' => ['a' => 1]]);
?>
<?php
echo <<
| 坑點 | 後果 | 修正 |
|---|---|---|
直接 echo $var 進 JS 字串 | 引號斷裂、XSS | json_encode($var) 自動處理轉義與類型 |
用 document.write 讀取 JS 變量給 PHP | 阻塞渲染、不可靠 | 改用 fetch/XMLHttpRequest + JSON |
PHP 輸出 <script>foo()</script> 但 foo 尚未定義 | JS 報錯 | 確保輸出位置在函數定義之後,或用 defer/事件監聽 |
| 混用單雙引號導致語法錯誤 | 腳本失效 | 統一用 json_encode 生成字面量 |
<script>window.__INITIAL_STATE__ = ;</script>src="xxx.php" 載入 JS:難以快取、除錯困難、CSP 不友好PHP 與 JS 的「互調」本質是代碼生成與 HTTP 通訊。掌握 json_encode()、正確的 Content-Type、AJAX/Fetch 模式,即可構建安全、可維護的全端應用。