PHP 為伺服端語言,無法直接彈出瀏覽器視窗。需輸出 JavaScript 或 HTTP 標頭指示瀏覽器執行「提示 → 跳轉」流程。以下整理 4 種常見模式,依場景選用。
alert() + location.href(最常用、支援攜帶訊息)<?php
$msg = '操作成功!';
$url = '/user/index';
// 輸出 JS 程式碼
echo "<script> alert('$msg'); window.location.href='$url'; </script>";
// 或親視窗跳轉
// echo "<script> alert('$msg'); parent.location.href='$url'; </script>";
?>
alert() + HTML <meta http-equiv="refresh">(可控制延遲秒數)<?php
$msg = '請先登入';
$url = '/login.php';
$delay = 3; // 3 秒後跳轉
echo "<script> alert('$msg'); </script>";
echo "<meta http-equiv='Refresh' content='{$delay};URL=$url'>";
?>
header("Location: ...")(純伺服端跳轉、無提示、效能最佳)<?php
// 立即跳轉,不輸出任何內容
header("Location: " . PSYS_BASE_URL . "user/index");
exit; // 關鍵:防止後續程式碼繼續執行
?>
header("Refresh: ...")(伺服端控制延遲跳轉、可選擇性輸出提示)<?php
$time = 2; // 2 秒
$url = '/dashboard.php';
// 可先輸出 HTML 提示,再由 Header 觸發跳轉
echo "<div style='padding:20px;text-align:center'>登入成功,{$time} 秒後跳轉...</div>";
header("Refresh: {$time}; url={$url}");
exit;
?>
exit / die所有跳轉程式碼後務必加 exit; 或 die;。否則 PHP 會繼續執行後續邏輯,導致:
return $this->redirect('url')->with('msg', '提示'); (配合閃存 Session 顯示提示)return redirect('url')->with('success', '提示');jump($url, $msg, $type) 輔助函數統一管理。| 場景 | 推薦方式 | 關鍵點 |
|---|---|---|
| 表單提交成功/失敗提示 | JS Alert + Location | 使用者確認後跳轉 |
| 權限不足、需延遲閱讀提示 | JS Alert + Meta Refresh | 可控制秒數、兼容無 JS |
| API、AJAX 回調、純後端邏輯跳轉 | Header Location | 最快、標準、無輸出 |
| 需輸出 HTML 頁面再延遲跳轉 | Header Refresh | 伺服端控制、可見內容 |