本文目录导读:

我来给你详细讲解 PHP 和 HTMX 的结合使用,这是目前很流行的前后端交互方式。
什么是 HTMX?
HTMX 是一个轻量级的 JavaScript 库,允许你在 HTML 中直接使用属性来发送 AJAX 请求,无需编写复杂的 JavaScript 代码。
基本用法
引入 HTMX
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
基础示例
前端 HTML (index.php):
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
</head>
<body>
<!-- 点击按钮发送 GET 请求 -->
<button hx-get="get-time.php" hx-target="#result">
获取时间
</button>
<div id="result"></div>
</body>
</html>
后端 PHP (get-time.php):
<?php
// 返回 HTML 片段
echo '<p>当前时间:' . date('Y-m-d H:i:s') . '</p>';
?>
常用 HTMX 属性
表单提交
前端:
<form hx-post="save-user.php" hx-target="#message">
<input type="text" name="name" placeholder="姓名">
<input type="email" name="email" placeholder="邮箱">
<button type="submit">保存</button>
</form>
<div id="message"></div>
后端 PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
// 处理数据...
// 返回反馈信息
echo '<div class="alert alert-success">用户 ' . $name . ' 保存成功!</div>';
}
?>
实时搜索
前端 HTML:
<input type="search"
name="search"
placeholder="输入搜索..."
hx-get="search.php"
hx-trigger="keyup changed delay:300ms"
hx-target="#search-results">
<div id="search-results"></div>
后端 PHP (search.php):
<?php
$search = $_GET['search'] ?? '';
// 模拟数据库查询
$users = ['张三', '李四', '王五', '赵六', '孙七'];
$results = array_filter($users, function($user) use ($search) {
return str_contains($user, $search);
});
if (empty($results)) {
echo '<p>没有找到结果</p>';
} else {
foreach ($results as $user) {
echo '<div>' . htmlspecialchars($user) . '</div>';
}
}
?>
高级用法
加载指示器
<button hx-get="load-content.php" hx-target="#content"
hx-indicator="#loading">
加载内容
</button>
<div id="loading" class="htmx-indicator">
加载中...
</div>
CSS 样式:
.htmx-indicator {
display: none;
}
.htmx-request .htmx-indicator {
display: block;
}
无限滚动
<div hx-get="more-posts.php" hx-trigger="revealed" hx-target="this" hx-swap="afterend">
<!-- 当前内容 -->
</div>
带确认的删除
<button hx-delete="delete-user.php?id=1"
hx-confirm="确定要删除吗?"
hx-target="closest tr">
删除
</button>
JSON 数据处理
<?php
// 设置响应头
header('Content-Type: application/json');
// 返回 JSON
echo json_encode(['status' => 'success', 'message' => '操作成功']);
?>
完整示例:任务管理系统
index.php:
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
<style>
.task-item { margin: 10px 0; }
.completed { text-decoration: line-through; }
</style>
</head>
<body>
<h1>任务列表</h1>
<!-- 添加任务表单 -->
<form hx-post="add-task.php" hx-target="#task-list" hx-swap="afterbegin">
<input type="text" name="task" placeholder="输入新任务" required>
<button type="submit">添加</button>
</form>
<!-- 任务列表 -->
<div id="task-list" hx-get="get-tasks.php" hx-trigger="load">
<!-- 任务将在这里显示 -->
</div>
</body>
</html>
add-task.php:
<?php
session_start();
$task = htmlspecialchars($_POST['task'] ?? '');
$task_id = uniqid();
// 添加到 session 数组(模拟数据库)
$_SESSION['tasks'][$task_id] = $task;
// 返回新任务 HTML
echo '<div class="task-item" id="task-' . $task_id . '">
<span>' . $task . '</span>
<button hx-delete="delete-task.php?id=' . $task_id . '"
hx-target="#task-' . $task_id . '"
hx-swap="outerHTML">删除</button>
</div>';
?>
get-tasks.php:
<?php
session_start();
$tasks = $_SESSION['tasks'] ?? [];
if (empty($tasks)) {
echo '<p>暂无任务</p>';
return;
}
foreach ($tasks as $id => $task) {
echo '<div class="task-item" id="task-' . $id . '">
<span>' . $task . '</span>
<button hx-delete="delete-task.php?id=' . $id . '"
hx-target="#task-' . $id . '"
hx-swap="outerHTML">删除</button>
</div>';
}
?>
delete-task.php:
<?php
session_start();
$id = $_GET['id'] ?? '';
if (isset($_SESSION['tasks'][$id])) {
unset($_SESSION['tasks'][$id]);
}
?>
<!-- 返回空内容 -->
注意事项
- 安全性:始终使用
htmlspecialchars()处理用户输入 - 数据验证:在 PHP 端始终进行数据验证
- 错误处理:使用 HTMX 的
hx-on-error处理错误情况
<div hx-get="api.php" hx-trigger="load" hx-on-error="alert('发生错误')">
</div>
- CSRF 防护:在处理 POST 请求时添加 CSRF token
<form hx-post="add-task.php" hx-target="#task-list">
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<!-- 其他字段 -->
</form>
HTMX 和 PHP 配合使用非常简洁高效,尤其适合小型到中型的 Web 应用,它大大减少了前后端分离架构中大量 JavaScript 代码的复杂性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播