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

jQuery Ajax提交表单后PHP的$_POST变量为空,此前运行正常

排查jQuery Ajax提交后PHP $_POST为空的问题

该表单在2024年1月前可正常运行,但现在通过jQuery Ajax提交后,PHP端的$_POST变量全部为空。console.log(str)显示序列化内容正确,但PHP端var_dump($_POST)返回空数组,打印$name和$email均为空。

相关代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:13:24