使用FormData向MySQL传数据时API接收数据异常问题求助
排查API无法接收数据的原因
嘿,我来帮你捋捋这个问题——你的API接收不到数据,核心原因是前端发送的是FormData格式,但后端却在尝试解析JSON数据,两者完全不匹配,导致数据无法正确读取。
问题拆解
- 前端请求类型:你用
FormData构造了包含文本字段和文件的表单数据,Angular的http.post发送这类数据时,会自动将请求头Content-Type设为multipart/form-data,这是上传文件的标准格式,并非JSON。 - 后端错误处理:你当前用
file_get_contents("php://input")读取请求体,再用json_decode解析——但multipart/form-data类型的请求体是由分隔符、字段内容混合组成的,根本不是合法的JSON字符串,所以json_decode会返回null,最终$_POST也取不到任何数据。
解决方案(推荐适配FormData,因为你要上传文件)
既然前端需要传文件,multipart/form-data是正确的选择,后端应该直接用PHP原生的$_POST和$_FILES来获取数据:
// 移除原来的json解析逻辑,直接用超全局变量获取数据 $nom = $_POST['nom']; // 获取表单文本字段 $uploadedImage = $_FILES['image']; // 获取上传的文件信息 // 处理文件上传(示例) if ($uploadedImage['error'] === UPLOAD_ERR_OK) { $uploadDir = './uploads/'; // 确保这个目录存在且有写权限 $targetPath = $uploadDir . basename($uploadedImage['name']); move_uploaded_file($uploadedImage['tmp_name'], $targetPath); }
额外注意:
- 前端URL里拼接的
&nom=+ nom是多余的(你已经在FormData里传了nom),而且&是HTML实体编码,应该直接用&,建议删掉这个URL参数避免混淆。 - 检查PHP配置:确保
php.ini中的upload_max_filesize、post_max_size等参数设置合理,允许文件上传。
备选方案(不推荐,无法传文件)
如果非要用JSON格式传输(仅适用于纯文本字段),前端需要修改请求方式,后端保留原逻辑:
insertService(nom: string) { const url = 'http://localhost/Admin/src/api/api.php?action=insertService'; return this.http.post(url, { nom: nom }, { headers: { 'Content-Type': 'application/json' } }); }
但这个方案无法上传文件,不符合你的业务场景,所以优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者mohamed farjallah
相关产品推荐
相关产品推荐

