You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

jQuery AJAX POST请求提交后服务器端$_POST数组为空求助

解决jQuery AJAX POST请求后PHP $_POST为空的问题

这种情况我碰到过好多次,别着急,咱们一步步排查:

1. 检查请求是否被重定向

打开Firebug的网络面板,查看这个POST请求的状态码。如果返回的是302 Found或者其他重定向状态,浏览器会自动把POST请求转换成GET请求跳转到新地址,这时候目标页面的$_POST自然是空的。

  • 解决办法:确认presupuesto_guardar.php没有做重定向操作,比如不要在这个文件里用header("Location: ...")

2. 明确设置AJAX的Content-Type

虽然jQuery默认会为POST请求设置application/x-www-form-urlencoded的Content-Type,但有时候服务器的配置可能对这个头的识别有问题。你可以手动指定:

$.ajax({
  type: 'POST',
  url: 'presupuesto_guardar.php',
  data: { 'data': '1' },
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8' // 手动指定
});

3. 尝试用字符串形式传递数据

有时候对象形式的data在序列化时可能出现意外(虽然概率很低),你可以换成字符串格式试试:

$.ajax({
  type: 'POST',
  url: 'presupuesto_guardar.php',
  data: 'data=1' // 直接传键值对字符串
});

4. 检查PHP配置限制

如果服务器的PHP配置里post_max_size设置得太小,或者max_input_vars数量不够,也会导致POST数据无法被接收。你可以在presupuesto_guardar.php里先输出配置看看:

echo ini_get('post_max_size');
echo ini_get('max_input_vars');
  • 解决办法:如果数值太小,修改php.ini里对应的配置项,或者联系服务器管理员调整。

5. 排查服务器安全拦截

有些服务器启用了mod_security或者其他防火墙插件,可能会误拦截你的POST请求。你可以临时关闭测试(如果有权限的话),或者检查服务器的错误日志,看有没有相关的拦截记录。

6. 直接查看原始请求数据

如果上面的方法都不行,你可以在PHP里直接读取原始的POST数据,确认数据到底有没有传到服务器:

$rawData = file_get_contents('php://input');
var_dump($rawData); // 看看输出的是什么

如果这里能看到data=1,那说明是PHP的$_POST解析有问题,可能和Content-Type或者配置有关;如果这里也空,那说明数据根本没发过来,得再检查AJAX代码。

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

火山引擎 最新活动