jQuery Ajax提交表单后PHP的$_POST变量为空,此前运行正常
排查jQuery Ajax提交后PHP $_POST为空的问题
该表单在2024年1月前可正常运行,但现在通过jQuery Ajax提交后,PHP端的
$_POST变量全部为空。console.log(str)显示序列化内容正确,但PHP端var_dump($_POST)返回空数组,打印$name和
相关代码
HTML
<form id="main-schedule-form" name="schedule-form" method="post" action="sendemailschedule.php"> <label for="nome">Nome*</label> <input type="text" class="form-control" id="nome" name="name" required/> <label for="email">E-mail*</label> <input type="email" class="form-control" id="email" name="email" required/> <button type="submit" class="btn btn-primary btn-lg">Enviar</button> </form>
jQuery
var form = $('#main-schedule-form'); form.submit(function(event) { var str = $(this).serialize(); // console.log(str)显示内容正确 $.ajax({ url: $(this).attr('action'), type: "POST", data: str, }).done(function(data) { $('#main-schedule-form')[0].reset(); alert("Thanks!"); }); });
PHP
<?php $name = @trim(stripslashes($_POST['name'])); $email= @trim(stripslashes($_POST['email'])); // 后续逻辑 ... ?>
排查与解决方法
阻止表单默认提交行为
原代码未阻止表单的默认同步提交,会导致页面跳转,Ajax请求可能被中断,PHP实际接收到的是跳转后的空请求。修改jQuery代码,添加event.preventDefault():var form = $('#main-schedule-form'); form.submit(function(event) { event.preventDefault(); // 阻止表单默认提交 var str = $(this).serialize(); $.ajax({ url: $(this).attr('action'), type: "POST", data: str, }).done(function(data) { $('#main-schedule-form')[0].reset(); alert("Thanks!"); }); });检查PHP的
post_max_size配置
若服务器近期调整过配置,post_max_size值过小会导致POST数据被丢弃。在PHP代码开头添加以下代码确认配置:var_dump(ini_get('post_max_size'));若值过小(比如小于
2M),可修改php.ini或通过.htaccess调整:php_value post_max_size 16M排查服务器拦截或URL重写问题
服务器的ModSecurity安全插件、URL重写规则(如mod_rewrite)可能拦截POST请求。可临时禁用相关规则/插件测试,或查看服务器错误日志是否有拦截记录。显式指定请求Content-Type
jQuery默认会为序列化数据设置正确的application/x-www-form-urlencoded类型,但显式指定可避免潜在的类型错误:$.ajax({ url: $(this).attr('action'), type: "POST", data: str, contentType: "application/x-www-form-urlencoded; charset=UTF-8", })检查
enable_post_data_reading配置
若PHP禁用了enable_post_data_reading,$_POST会为空。在PHP中打印该配置值确认:var_dump(ini_get('enable_post_data_reading'));若返回
off,需在php.ini中启用该配置。
内容的提问来源于stack exchange,提问作者aseolin
相关产品推荐
相关产品推荐

