You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript Fetch()时如何展示PHP后端返回的验证错误信息

解决方案

调整PHP后端返回逻辑

你需要将后端的输出统一改为JSON格式,方便前端区分请求成功/失败状态、读取对应提示信息,修改后的PHP代码如下:

<?php
// 首先设置返回格式为JSON,避免乱码和解析错误
header('Content-Type: application/json');
// 初始化返回数据结构
$result = [
    'success' => false,
    'errors' => [],
    'message' => ''
];

// 注:$postTitle是HTML表单提交的文章标题对应的变量
if(!preg_match('/^[a-zA-Z0-9\s]+$/', $postTitle)) {
    $result['errors'][] = "文章标题仅支持字母、数字和空格";
}

// 无错误则处理提交请求
if (empty($result['errors'])) {
    try {
        // 用于更新数据库中文章/帖子信息的PDO预处理语句
        // 执行成功后修改状态为成功
        $result['success'] = true;
        $result['message'] = '提交成功';
    } catch (PDOException $e) {
        $result['errors'][] = "系统错误:" . $e->getMessage();
    }
}

// 输出JSON格式结果并终止后续逻辑
echo json_encode($result);
exit;
?>

修改前端Fetch提交逻辑

你之前的代码不管请求结果都会直接删除表单,导致错误信息没有地方展示,需要把删除逻辑移到成功分支,同时新增错误信息渲染逻辑,修改后的JS代码如下:

const forms = document.querySelectorAll('form');

forms.forEach(item => {
    item.addEventListener("submit", function(e) {
        e.preventDefault();
        const formData = new FormData(this);
        // 先获取表单的父容器,方便后续插入错误信息
        const formParent = this.parentElement;

        fetch("news-posts.php", {
            method: 'post',
            body: formData
        }).then(function(response){
            // 改为解析JSON格式的返回值
            return response.json();
        }).then(function(result){
            if (result.success) {
                // 提交成功才删除表单,可按需加成功提示
                item.remove();
                alert(result.message);
            } else {
                // 提交失败,渲染所有错误信息
                let errorHtml = '';
                result.errors.forEach(msg => {
                    errorHtml += `<p style="color: red;">你有一个错误:${msg}</p>`;
                });
                // 把错误信息插入到表单前
                formParent.insertAdjacentHTML('afterbegin', errorHtml);
            }
        }).catch(function (error){
            // 处理请求失败的情况(如网络错误、后端返回格式错误)
            formParent.insertAdjacentHTML('afterbegin', '<p style="color: red;">网络异常,请稍后重试</p>');
            console.error(error);
        })
    })
})

如果需要保留原有的PHP错误输出风格,也可以直接让后端返回HTML字符串,前端拿到后直接插入到页面即可,不需要解析JSON。


内容的提问来源于stack exchange,提问作者pjk_ok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:57:02