首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 通用彈窗提示函數 Alert:集成消息提示、跳轉、關閉、回調於一體

     編輯:PHP 相關知識

功能特性

  • 支持彈出 alert 提示信息
  • 支持多種後續動作:返回上頁、刷新頁面、關閉窗口、跳轉 URL、執行 JS 函數
  • 可配置延遲執行時間
  • 兼容 Firefox 等瀏覽器的 setTimeout 特性
  • 統一輸出 UTF-8 編碼的 JS 代碼

函數簽名

/**
 * @param string $Str  提示信息(為空則不彈窗)
 * @param string $Typ  動作類型:back|reload|close|function|URL
 * @param string $TopWindow  目標窗口/函數名
 * @param int    $Tim  延遲毫秒(默認 100ms)
 */
function Alert($Str, $Typ = "back", $TopWindow = "", $Tim = 100)

完整實現代碼

<?php
function Alert($Str, $Typ = "back", $TopWindow = "", $Tim = 100) {
    echo "<script>\n";
    if (!empty($Str)) {
        // 雙重換行增強可讀性
        echo "alert(\"Warning:\\n\\n{$Str}\\n\\n\");\n";
    }
    echo "function _r_r_(){\n";
    $win = !empty($TopWindow) ? "top" : "self";

    switch (strtolower($Typ)) {
        case "#": break; // 無操作
        case "back":
            echo "{$win}.history.go(-1);\n"; break;
        case "reload":
            echo "{$win}.window.location.reload();\n"; break;
        case "close":
            echo "window.opener=null; window.close();\n"; break;
        case "function":
            // 執行父頁面或當前頁面的指定函數
            echo "var _T = new Function('return {$TopWindow}')(); _T();\n"; break;
        default:
            if ($Typ !== "") {
                // 視為 URL 跳轉
                echo "window.{$win}.location = '{$Typ}';\n";
            }
    }
    echo "}\n";

    // 兼容 Firefox: setTimeout 返回值在某些版本為定時器 ID,非 undefined
    // 此處採用雙重保險:立即執行 + 定時執行
    echo "if (setTimeout('_r_r_()', {$Tim}) == 2) { _r_r_(); }\n";
    if ($Tim == 100) {
        echo "_r_r_();\n";
    } else {
        echo "setTimeout('_r_r_()', {$Tim});\n";
    }
    echo "</script>\n";
    exit(); // 終止腳本後續輸出
}
?>

使用示例

<?php
require 'Alert.php';

// 1. 提示並返回上頁
Alert("操作成功!", "back");

// 2. 提示並刷新父頁面
Alert("數據已更新", "reload", "parent");

// 3. 提示並跳轉指定 URL
Alert("登錄成功", "https://example.com/dashboard");

// 4. 提示並執行父頁面 JS 函數 refreshList()
Alert("刪除完成", "function", "parent.refreshList", 500);

// 5. 僅彈窗不跳轉(延遲 3 秒關閉)
Alert("僅提示信息", "#", "", 3000);
?>

注意事項與現代替代

  • 阻塞執行:exit() 會強制終止腳本,確保在輸出前調用,或改為返回 JS 字符串由調用者輸出。
  • XSS 風險:$Str、$Typ、$TopWindow 直接拼接進 JS,必須確保來源可信或經過 json_encode 轉義。
  • 現代模式:前後端分離架構下,後端返回 JSON 狀態碼,前端框架(Vue/React/Layer/SweetAlert2)負責彈窗與路由跳轉,不再由 PHP 直接輸出 JS。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved